Există o modalitate mai simplă de a face acest lucru? grep -v foo file | grep -v bar
Probabil că există modalități foarte elegante de a face acest lucru cu egrep, dar cum să mergeți cu grep vechi simplu?
EDIT: grep -v "foo\|bar" file
pare să funcționeze numai cu GNU grep. Eu „m pe Solaris. Orice soluție pentru asta?
Comentarii
Răspuns
Puteți avea mai multe teste într-un comandă grep
simplă prin trecerea fiecărei expresii cu un argument -e
în loc de primul argument de non-opțiune așa cum vedeți în mod normal:
$ grep -v -e foo -e bar file
Aceasta spune același lucru pe care îl face comanda dvs.: imprimați linii din file
care nu conțin nici „foo” și nici „bar” .
Rețineți că eliminarea -v
inversează complet acest lucru; schimbă și operația logică! Veți obține toate liniile care conțin „foo” sau „bară”.
Răspuns
grep -Ev "word1|word2"
ar trebui să funcționeze bine
Comentarii
- Ca alternativă, puteți utiliza egrep și lăsați bara inversă pentru caracter de țeavă:
egrep -v 'word1|word2
- Se pare că acest lucru nu funcționează cu grep Solaris. Am instalat grep-ul GNU și am funcționat perfect. ' Voi edita întrebarea mea pentru a o face specifică Solaris.
- @rahmu
\|
este un grep GNU extensie, dar puteți realiza același lucru într-un mod portabil cu-E
și cu operatorul|
.
-v
este o negație.not(A or B) == not(A) and not(B)