Grep은 -v와 -A/B를 동시에 사용할 수 없습니다.

Grep은 -v와 -A/B를 동시에 사용할 수 없습니다.

그래서 -v 매개변수와 -A 매개변수와 함께 grep을 사용해 보았습니다.

그래서 내 파일에는 다음과 같은 텍스트가 있습니다.

This error
-this
-this
-that
[text I want]
This error
-asd
-asfag
-adsfhs
[text I want]
[text I want]
This error
-asdgsda
-asdgg
-gasdg

꼬리를 살펴본 후 이 로그 파일이 동일한 내용으로 채워져 있고 This error그 뒤에 3줄의 구문이 있다는 것을 발견했습니다. 이는 grep -A3 'This error'오류와 그에 따른 3줄을 표시하는 를 사용하여 쉽게 찾을 수 있었습니다.

그런데 그것 빼고 다 보고 싶어서 -v 매개변수를 써봤는데 안 되더라고요. 이렇게 하면 grep -v -A3 'This error'grep이 전혀 작동하지 않는 것처럼 전체 파일이 반환됩니다.

여기서 문제가 무엇입니까?

답변1

sed대신 사용할 수 있으면 grep좋은 솔루션을 제공합니다 .

sed -e '/This error/,+3d' myfile

This error그러면 해당 문자열 과 다음 세 줄이 포함된 줄이 삭제되지만 나머지는 모두 출력됩니다. 이 sed명령에는 GNU가 필요합니다 sed( +3주소는 확장자입니다).

답변2

당신은 그것을 사용할 수 있습니다 pcregrep:

pcregrep -vM  'This error\n.*\n.*\n.*' file

출력은 다음과 같습니다.

[text I want]
[text I want]
[text I want] 

인용하다https://stackoverflow.com/q/2686147/9235408

답변3

지느러미 수영 선수로서댓글에서 지적한, grep -v명령은 텍스트와 일치하지 않는 각 줄 다음에 세 줄을 출력합니다 This error. 당신이 원하는 것이 아닌가요?

사용 표준 sed:

sed '/This error/{ N;N;N; d; }' file

파일에서 텍스트를 찾고 This error해당 텍스트를 찾으면 다음 세 줄도 읽고 네 줄을 모두 삭제합니다. 다른 모든 라인은 출력됩니다.

관련 정보