Say I have a file:
# file: 'test.txt'
foobar bash 1
bash
foobar happy
foobar
나만 알고 싶은 것, 그래서 이 후, regex foobar" 단어들은요 " 사용할 수 있습니다.
"foobar \(\w\+\)"
I have a 각별한 관심을 나타내는 단어가 바로 뒤에 괄호를 포바. 그러나 그렇게 '\ (\w+) " 포바 그렙 "; 저도 테스트리트스트 ', 전체 줄 뿐 아니라, 이 후 정규 표현식, 전체 일치시킵니다 " 말을해야합니다 foobar":
foobar bash 1
foobar happy
꼭 이래야겠어요 포지셔닝하십시오 출력물에는 다음과 같은 명령을 생각하고 있는 것이 훨씬
bash
happy
떠날려하면 그렙 출력할 수 있는 방법이 고작 항목과의 일치시킵니다 그룹짓기 (또는 특정 그룹짓기) 에 정규식이?
'와', '는 gnu 그렙 p 펄 (perl) 스타일 옵션을 정규 표현식 -o' 옵션을 기능만 인쇄하려면 일치시킵니다 패턴. 이러한 결합할 수 있는 볼 주위에 사용하여 어설션을 (설명됨 go-dell [확장됨 패턴을 펄리 마 페이지 에서] [1]) 를 그렙 패턴 중 일부 제거 할 목적으로 뭐로부터요 판별됩니다 정합된 '-o'.
$ grep -oP 'foobar \K\w+' test.txt
bash
happy
$
이 '\K "는 짧은 형식 (, 보다 효율적인 형식) 을 사용하는 너비 볼 숨김' (?) = 패턴 <) '로 전에 어설션하지 텍스트를 출력입니다. ' (?) = 패턴)' 으로 사용할 수 있습니다 후 너비 예측 어설션하지 텍스트를 출력입니다.
예를 들어, 하고 싶은 말 ',' foo '와' 표시줄에는 일치시킵니다 사이에 사용할 수 있습니다.
$ grep -oP 'foo \K\w+(?= bar)' test.txt
또는 (현상에 대해)
$ grep -oP '(?<=foo )\w+(?= bar)' test.txt
[1]: http://perldoc.perl.org/perlre.html # 확장됨 패턴
하지만 이렇게 표준 그렙 can& # 39, t [최신 버전의 GNU 그렙 수] (https://unix.stackexchange.com/questions/13466/can-grep-output-only-specified-groupings-that-match/13472 # 13472). 펄 (perl) 또는 sed, awk 돌릴 수 있습니다. 다음은 그러한 작업을 수행할 수 있는 몇 가지 예를 따라 그리웠댔지 샘플링합니다 입력입니다. 약간 다르게 행동하기 모퉁이점 건이다.
다른 어떤 '단어', '라는 굈' 포바 에서 인쇄하십시오 교체품을 경우에만 수행됩니다.
sed -n -e 's/^foobar \([[:alnum:]]\+\).*/\1/p'
만약 첫 번째 ',' 는 말을 포바 인쇄인쇄 말을해야합니다.
awk '$1 == "foobar" {print $2}'
perl -lne 's/^foobar\s+// or next; s/\s.*//; print'
sed -n "s/^.*foobar\s*\(\S*\).*$/\1/p"
-n suppress printing
s substitute
^.* anything before foobar
foobar initial search match
\s* any white space character (space)
\( start capture group
\S* capture any non-white space character (word)
\) end capture group
.*$ anything after the capture group
\1 substitute everything with the 1st capture group
p print it
Pcre 의 경우 동일한 결과를 얻을 수 있는 두 개의 호출 그렙 지원되지 않습니다. 예를 들어 잡기 위한 말을해야합니다 foobar 후 이렇게:
<test.txt grep -o 'foobar *[^ ]*' | grep -o '[^ ]*$'
이 후 이런 자의적 foobar word 로 확장할 수 있습니다 (전에 함께 쉽게 구별할 수 있도록):
i=1
<test.txt egrep -o 'foobar +([^ ]+ +){'$i'}[^ ]+' | grep -o '[^ ]*$'
출력:
1
'I' 는 인덱스화할 기록하십시오 부터 시작하는.
이후 '/' '아니다', '크로스 플랫폼 호환적 사용하여 그렙 p 펄 (perl) 의 정규 표현식' 에서만 사용할 수 있습니다 (gnu '그렙'] 1, bsd '그렙' 없습니다.
다음은 이용하여 솔루션을 '립그레프':
$ rg -o "foobar (\w+)" -r '$1' <test.txt
bash
happy
'친구 따라 rg':
>. '대체 텍스트와 함께' -r '/' 복귀시킴 replacement_text 매 경기 때.
>. 그룹화할 캡처하기 인덱스 (예를 들어, '$5') 와 이름 (예: $ foo ',') 가 지원됩니까 대체 구체화하십시오.
sup> <; 관련. 462 gh .< /sup>;
내가 찾은 답은 아주 도움됐네 @jgshawkey 있다. 하지만, sed 는 아니다 '' 등 그렙 공구입니다 엔드입니다 사용하는 예는 있지만 여기서는 그렙 잡기 위한 관련 선.
Sed 는 정규 표현식 문법 거북한데 특이한 경우.
또 다른 예가 있습니다. 이 번호요 분석하고 신푸스 출력을 얻을 수 있는 ID integer
⎜ ↳ SynPS/2 Synaptics TouchPad id=19 [slave pointer (2)]
그리고 난 로렌아줌마가 19
export TouchPadID=$(xinput | grep 'TouchPad' | sed -n "s/^.*id=\([[:digit:]]\+\).*$/\1/p")
참고합니다 클래스 문법.
[[:digit:]]
이스케이프입니다 필요하다는 것은 다음 '+'
내가 solaris. 한 줄만 경기에 출전하였다.