2010-12-27 4 views
1

나는 모든 라인 그들은 또한 bar를 포함하지 않는 foo, 를 포함 제외 보여주고 싶습니다. Logically!(foo and (!bar)) === (!foo) or bar, 그래서 두 개의 표현식을 사용할 수 있습니다. 단일 grep 또는 egrep와이 종류의 일치를 수행 할 수 있습니까? 이 두 표현을 부정하기 때문에 -v은 작동하지 않습니다, 나는 아마 펄 정규식을 사용할 수 없습니다.더블/반전 된 egrep

의 의 다음 작품을

하지만이 egrep에서 할 수 있다면 코드를 변환하는 더 적은 일 것이다 :

$ echo ' 
foo 
bar 
moofoo 
foobar 
barbar' | grep -Pv '^((?!bar).)*foo((?!bar).)*$' 

bar 
foobar 
barbar 

손에서 문제는 속도 (기가 바이트의 데이터에서 패턴을 찾고).

+0

와우 내 머리가 아플뿐입니다. 좋은 질문. 호기심 때문에 Perl 정규 표현식을 사용하지 못하게 된 이유는 무엇입니까? egrep이 -P를 지원하지 않습니까? –

+0

@Dave G :'egrep -P'는'pgrep' 또는'grep -P'와 동일하므로 아무 것도 변경하지 않습니다. – l0b0

답변

1

다음 다음 원하는 출력을

awk 'BEGIN {FS=" "}; 
      { 
       if ($0 ~ /(foo)/) 
       { 
        if ($0 ~ /(bar)/) 
        { 
         print $0 
        } 
       } 
       else 
       { 
        print $0 
       } 
      }' FileContainingText.txt 

을 제공합니다.

관련 문제