여러 인수에 grep -v 사용


12

더 간단한 방법이 있습니까? grep -v foo file | grep -v bar

egrep을 사용하여 매우 우아한 방법이있을 수 있지만 오래된 오래된 grep을 사용하는 방법은 무엇입니까?

편집 : grep -v 'foo\|bar' fileGNU grep에서만 작동하는 것 같습니다. 저는 솔라리스에 있습니다. 그에 대한 해결책이 있습니까?


첫 번째 예에서는 AND 일치를 수행하고 두 번째 예에서는 OR 일치를 수행하기 때문에 이상한 질문입니다. 결과는 매우 구체적인 조건에서만 동일합니다.
greenoldman

1
아니 정말. 두 번째 예에서 -v플래그는 부정입니다. not(A or B) == not(A) and not(B)
rahmu

답변:


21

일반적으로 볼 수있는 첫 번째 비 옵션 인수 대신 인수 grep와 함께 각 표현식을 전달 하여 단일 명령 에서 여러 테스트를 수행 할 수 있습니다 -e.

$ grep -v -e foo -e bar file

file"foo"나 "bar"를 포함하지 않는 행을 인쇄하십시오 .

-v완전히 제거 하면 이것을 뒤집을 수 있습니다. 논리 연산도 변경됩니다! "foo" 또는 "bar" 가 포함 된 모든 줄을 얻습니다 .


12

grep -Ev 'word1|word2' 잘 작동합니다


대안으로 egrep을 사용하여 파이프 문자에 대한 백 슬래시를 삭제할 수 있습니다.egrep -v 'word1|word2
OldTimer

이것이 Solaris grep에서 작동하지 않는 것으로 나타났습니다. GNU grep을 설치하고 완벽하게 작동했습니다. 솔라리스에 맞게 질문을 편집하겠습니다.
rahmu

2
@rahmu는 \|하는 GNU 그렙 확장,하지만 당신은 가진 휴대용 방법으로 같은 일을 달성 할 수 -E|연산자.
Gilles 'SO- 악마 그만해'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.