그래서 -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]
답변3
지느러미 수영 선수로서댓글에서 지적한, grep -v
명령은 텍스트와 일치하지 않는 각 줄 다음에 세 줄을 출력합니다 This error
. 당신이 원하는 것이 아닌가요?
사용 표준 sed
:
sed '/This error/{ N;N;N; d; }' file
파일에서 텍스트를 찾고 This error
해당 텍스트를 찾으면 다음 세 줄도 읽고 네 줄을 모두 삭제합니다. 다른 모든 라인은 출력됩니다.