여러 문자열을 Grep하여 문자열 중 하나 뒤에 오는 줄 수를 표시합니다(다른 문자열은 표시하지 않음).

여러 문자열을 Grep하여 문자열 중 하나 뒤에 오는 줄 수를 표시합니다(다른 문자열은 표시하지 않음).

파일에서 여러 문자열을 검색하고 특정 문자열을 검색하고 그 뒤에 오는 5줄도 표시하고 싶습니다.

cat file | grep -e 'string1' -e 'string2'

물론 작동하지만 다음과 같은 것을 얻고 싶습니다.

cat file | grep -e 'string1' -e -A 5 'string2'

string1을 포함하는 줄만 표시하고 string2를 포함하는 줄과 string2 뒤의 5줄만 표시하고 string1 뒤의 5줄은 표시하지 않도록 하려면 어떻게 해야 합니까(-A 5 옵션을 사용한다고 가정)?

편집: 방금 awk로 작업했습니다.

cat file | awk '/string1/{c=1}/string2/{c=5}{while(c-->0){print;getline}}'

답변1

awk 코드에 대하여

awk '/string1/ {if ( c <= 0 ) c = 1;} /string2/ {c=5} { if (c-- > 0) print; }' file
  • 아니요 cat ... | awk, awk는 파일을 읽을 수 있습니다.
  • 테스트를 재정렬했습니다(string1이 string2 다음에 한 줄 오면 OP 솔루션에서 인쇄가 중단됩니다).

답변2

한 번에 모두 사용할 수는 없습니다 grep. 두 개의 인스턴스를 사용해야 합니다 grep.

grep 'string1' file; grep -A 5 'string2' file

첫 번째 성공 후 두 번째 실행을 실행하려면 다음을 수행하세요.

grep 'string1' file && grep -A 5 'string2' file

답변3

해결책:

sed -n '/string2/,+4{p;b;};/string1/p' file

나도 대신 sed받아들인다~+

관련 정보