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
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.
-v
flag en negation.not(A or B) == not(A) and not(B)