Van erre egyszerűbb módszer? grep -v foo file | grep -v bar

Valószínűleg nagyon elegáns módon lehet ezt megtenni az egrep segítségével, de hogyan lehet a sima régi grepet használni?

SZERKESZTÉS: Úgy tűnik, hogy a grep -v "foo\|bar" file csak a GNU grep-vel működik. I “m a Solarison. Van valamilyen megoldás erre?

Megjegyzések

  • Furcsa kérdés, mert az első példában AND-t csinálsz, a másodikban VAGY egyeztetsz . Az eredmény csak nagyon meghatározott körülmények között lesz ugyanaz.
  • Nem, nem igazán. A második példában az -v zászló tagadás. not(A or B) == not(A) and not(B)

Válasz

Több teszt is elvégezhető egy egyetlen grep parancs úgy, hogy az egyes kifejezéseket egy -e argumentummal adja át, ahelyett, hogy az első nem opciós argumentum lenne, mint általában látja: >

$ grep -v -e foo -e bar file 

Ez ugyanazt mondja, amit a parancsod: a file sorokat nyomtatja ki, amelyek nem tartalmaznak sem “foo”, sem “bar” .

Ne feledje, hogy az -v eltávolítása ezt teljesen megfordítja; megváltoztatja a logikai műveletet is! Megkapja az összes sort, amely tartalmazza a “foo” vagy “bar” szót.

Válasz

grep -Ev "word1|word2" rendben kell működnie

Megjegyzések

  • Alternatív megoldásként használhatja az egrep parancsot, és eldobhatja a pip karakter: egrep -v 'word1|word2
  • Kiderült, hogy ez nem működik a Solaris grep-kel. Telepítettem a GNU grep-et és tökéletesen működtem. ' szerkeszteni fogom a kérdésemet, hogy Solaris-specifikus legyen.
  • @rahmu \| egy GNU grep kiterjesztés, de ugyanezt hordozható módon is elérheti a -E és a | operátorral.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük