2011-11-21 7 views
0

을 사용하여 패턴을 추출 내가 나오지도 사용이 문자열 중 25을 추출 할이나오지 명령

"112344 1234234 guest 25 % allocation used" 

같은 문자열이있다.

주어진 줄에 "112344 1234234 손님 할당 25 % 사용됨"으로, 나는 "25 %"에만 관심이 있습니다.

하지만 "사용 % 할당은"고정 된 문자열입니다

"사용 25 % 할당": 첫 번째 필드는 다음과 같이도 비어있을 수 있습니다. 그래서 정규 표현식은이 고정 패턴을 기반으로해야합니다.

아무도 도와 주실 수 없습니까?

+0

단일 샘플 입력을 기반으로 무언가를 추출하기위한 정규식 패턴을 찾는 것은 어렵습니다. 어떤 부분이 다릅니 까? 어떤면에서? (물론, 처음부터 정규 표현식을 작성하는 본질입니다.) – sarnold

+0

이것은 매우 특이하지 않습니다. 네 번째 필드는 항상 원하니? 처음 두 자리 숫자? –

+0

'25' 또는'25 %'의 추출 여부를 명확히하십시오. –

답변

0

cut -d% -f1 | awk '{ print $(NF) }' 
2

본질적으로 오른쪽에서 네 번째 필드를 원합니다. 이를 얻으려면, 내가 awk 사용하십시오 :

awk '{ print $(NF-3) }' 

절대적으로 sed에 있어야하는 경우,이 시도 : 당신이해야하는 경우

sed -e 's/^/ /' -e 's/\(^|.* \)\(.*\) % allocation used/\1/' 
+0

25 %가 추출되지 않습니다. 대신 전체 행을 인쇄합니다. – Fayaz

+0

@Fayaz 나는 GNU sed에서 확장 된'\ <'메타 문자를 사용했다. POSIX 호환 sed와 함께 작동하도록 수정했습니다. –

+0

@Fayaz 질문을 업데이트하고 싶을 수도 있습니다. 'sed를 사용하여이 문자열에서 25를 추출하고 싶습니다.''% '- sed -e's/.* \ <\ (. * \) 할당/\ 1 /' –

1

시도 '%'앞에 오는 숫자는 2 자리이며 다음을 사용할 수 있습니다.

[jaypal~/Temp]$ cat text5 
112344 1234234 guest 25 % allocation used 
25 % allocation used 
2344 guest 15 % allocation used 

[jaypal~/Temp]$ sed 's/.*\(.. %\).*/\1/' text5 
25 % 
25 % 
15 %