첫 번째 일치 후 일치 항목을 찾으려면 grep을 확장하세요.

첫 번째 일치 후 일치 항목을 찾으려면 grep을 확장하세요.

줄 바꿈으로 구분된 긴 문자열이 있고 각 부분은 ( ~파일에 다른 문자열이 없음)으로 시작하는 문자열로 구분되어 있습니다. grep을 확장하여 일치 항목 바로 아래의 텍스트를 ~찾고 싶습니다 .~

입력하다:

abc
ads
acb
abc
acsa
acfs
~notthis
abc
ads
acb
xyz                <-- pattern
acsa
acfs
~this              <-- output
abc
ads
acb
abc
acsa
acfs
~no

검색시 출력 xyz:

~ this

나는 awk다음과 같은 것을 할 것입니다

awk '/xyz/{x=1}x&&/~/{print;exit}' file

하지만 성능상의 이점이 있다면 grep을 사용하고 싶습니다.

답변1

적어도 GNU의 경우 grep 2.12:

$ grep -Pzo 'xyz(?:.*\n)*?\K~this' file
~this

귀하의 버전에서 허용 grep하지 않는 경우 다음을 사용할 수 있습니다.-P-zpcregrep대신에:

$ pcregrep -Mo 'xyz(?:.*\n)*?\K~this' file
~this

답변2

cat "$file" | grep xyz -A 10000 | grep \~ -m1

또는 동등하게,

grep -A 10000 xyz "$file" | grep -m1 '~'

관련 정보