Existuje jednodušší způsob, jak to udělat? grep -v foo file | grep -v bar
Existují pravděpodobně velmi elegantní způsoby, jak to udělat s egrep, ale jak postupovat s obyčejným starým grepem?
EDIT: Zdá se, že grep -v "foo\|bar" file
funguje pouze s GNU grep. Jsem na Solarisu. Máte k tomu nějaké řešení?
Komentáře
Odpověď
Můžete mít více testů v single grep
příkaz předáním každého výrazu s -e
argumentem místo jako prvního nepovinného argumentu, jak běžně vidíte:
$ grep -v -e foo -e bar file
To říká totéž, co váš příkaz: tisknout řádky z file
, které neobsahují ani „foo“, ani „bar“ .
Mějte na paměti, že odstranění -v
to úplně převrátí; mění také logickou operaci! Získáte všechny řádky, které obsahují „foo“ nebo „bar“.
Odpovědět
grep -Ev "word1|word2"
by měl fungovat dobře
Komentáře
- Jako alternativu můžete použít egrep a zrušit zpětné lomítko pro znak potrubí:
egrep -v 'word1|word2
- Ukázalo se, že to nefunguje s grepem Solaris. Nainstaloval jsem GNU grep a fungoval perfektně. ' upravím svoji otázku tak, aby byla specifická pro Solaris.
- @rahmu
\|
je GNU grep rozšíření, ale stejného můžete dosáhnout přenosným způsobem pomocí-E
a operátoru|
.
-v
negací.not(A or B) == not(A) and not(B)