줄 바꿈으로 구분된 긴 문자열이 있고 각 부분은 ( ~
파일에 다른 문자열이 없음)으로 시작하는 문자열로 구분되어 있습니다. 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
-z
pcregrep대신에:
$ pcregrep -Mo 'xyz(?:.*\n)*?\K~this' file
~this
답변2
cat "$file" | grep xyz -A 10000 | grep \~ -m1
또는 동등하게,
grep -A 10000 xyz "$file" | grep -m1 '~'