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
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
zászló tagadás.not(A or B) == not(A) and not(B)