파일에서 여러 문자열을 검색하고 특정 문자열을 검색하고 그 뒤에 오는 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
받아들인다~
+