이 작업을 수행하는 더 간단한 방법이 있습니까? grep -v foo file | grep -v bar

egrep을 사용하여 수행하는 매우 우아한 방법이있을 수 있지만 일반 이전 grep을 사용하는 방법은 무엇입니까?

편집 : grep -v "foo\|bar" file는 GNU grep에서만 작동하는 것 같습니다. 저는 Solaris를 사용하고 있습니다. 이에 대한 해결책이 있습니까?

댓글

  • 첫 번째 예에서는 AND 일치를 수행하고 두 번째 예에서는 OR 일치를 수행하기 때문에 이상한 질문입니다. . 결과는 매우 특정한 조건에서만 동일합니다.
  • 아니요. 두 번째 예에서 -v 플래그는 부정입니다. not(A or B) == not(A) and not(B)

답변

일반적으로 볼 수있는 첫 번째 비 옵션 인수 대신 -e 인수를 사용하여 각 표현식을 전달하여 단일 grep 명령 :

$ grep -v -e foo -e bar file 

당신의 명령이하는 것과 같은 일입니다. “foo”도 “bar”도 포함하지 않는 file에서 줄을 인쇄합니다. .

-v를 제거하면 완전히 반전됩니다. 논리 연산도 변경합니다! “foo” 또는 “bar”를 포함하는 모든 줄을 얻습니다.

Answer

grep -Ev "word1|word2"는 잘 작동합니다.

댓글

  • 대안으로 egrep을 사용하고 백 슬래시를 삭제할 수 있습니다. 파이프 문자 : egrep -v 'word1|word2
  • Solaris grep에서 작동하지 않음을 확인합니다. GNU grep을 설치하고 완벽하게 작동했습니다. 저는 ' 제 질문을 Solaris에 맞게 수정하겠습니다.
  • @rahmu \|는 GNU grep입니다. 확장하지만 -E| 연산자를 사용하면 이식 가능한 방식으로 동일한 작업을 수행 할 수 있습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다