이 작업을 수행하는 더 간단한 방법이 있습니까? grep -v foo file | grep -v bar
egrep을 사용하여 수행하는 매우 우아한 방법이있을 수 있지만 일반 이전 grep을 사용하는 방법은 무엇입니까?
편집 : grep -v "foo\|bar" file
는 GNU grep에서만 작동하는 것 같습니다. 저는 Solaris를 사용하고 있습니다. 이에 대한 해결책이 있습니까?
댓글
답변
일반적으로 볼 수있는 첫 번째 비 옵션 인수 대신 -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
및|
연산자를 사용하면 이식 가능한 방식으로 동일한 작업을 수행 할 수 있습니다.
-v
플래그는 부정입니다.not(A or B) == not(A) and not(B)