Er der en enklere måde at gøre dette på? grep -v foo file | grep -v bar

Der er sandsynligvis meget elegante måder at gøre det med egrep på, men hvordan man går med almindelig gammel grep?

EDIT: grep -v "foo\|bar" file ser ud til kun at fungere med GNU grep. Jeg er på Solaris. Enhver løsning på det?

Kommentarer

  • Mærkeligt spørgsmål, fordi du i det første eksempel laver OG matcher, og i det andet laver du ELLER match . Resultatet vil kun være det samme under meget specifikke forhold.
  • Nej, ikke rigtig. I det andet eksempel er -v flag en negation. not(A or B) == not(A) and not(B)

Svar

Du kan have flere tests i en enkelt grep kommando ved at videregive hvert udtryk med et -e argument i stedet for som det første ikke-option argument som du normalt ser:

$ grep -v -e foo -e bar file 

Det siger det samme, som din kommando gør: Udskriv linjer fra file, der hverken indeholder “foo” eller “bar” .

Husk, at fjernelse af -v inverterer dette fuldstændigt; det ændrer også den logiske funktion! Du får alle linjer, der indeholder “foo” eller “bar”.

Svar

grep -Ev "word1|word2" skal fungere fint

Kommentarer

  • Som et alternativ kan du bruge egrep og slippe tilbageslag til rørkarakter: egrep -v 'word1|word2
  • Viser sig, at dette ikke fungerer med Solaris grep. Jeg installerede GNU grep og fungerede perfekt. Jeg ' skal redigere mit spørgsmål for at gøre det Solaris-specifikt.
  • @rahmu \| er en GNU grep udvidelse, men du kan opnå det samme på en bærbar måde med -E og | operatøren.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *