Er det en enklere måte å gjøre dette på? grep -v foo file | grep -v bar
Det er sannsynligvis veldig elegante måter å gjøre det med egrep på, men hvordan går man med vanlig gammel grep?
EDIT: grep -v "foo\|bar" file
ser ut til å fungere bare med GNU grep. Jeg er på Solaris. Noen løsning på det?
Kommentarer
Svar
Du kan ha flere tester i en enkelt grep
kommando ved å sende hvert uttrykk med et -e
-argument i stedet for som det første ikke-alternativ-argumentet som du vanligvis ser:
$ grep -v -e foo -e bar file
Det sier det samme som kommandoen din gjør: skriv ut linjer fra file
som verken inneholder «foo» eller «bar» .
Husk at fjerning av -v
inverterer dette fullstendig; det endrer også den logiske operasjonen! Du får alle linjene som inneholder «foo» eller «bar».
Svar
grep -Ev "word1|word2"
skal fungere fint
Kommentarer
- Som et alternativ kan du bruke egrep og slippe tilbakesnittet for rørkarakter:
egrep -v 'word1|word2
- Viser seg at dette ikke fungerer med Solaris grep. Jeg installerte GNU grep og fungerte perfekt. Jeg ' skal redigere spørsmålet mitt for å gjøre det Solaris spesifikt.
- @rahmu
\|
er en GNU grep utvidelse, men du kan oppnå det samme på en bærbar måte med-E
og|
operatøren.
-v
-flagget en negasjon.not(A or B) == not(A) and not(B)