Birden çok bağımsız değişkende grep -v kullanma


12

Bunu yapmanın daha basit bir yolu var mı? grep -v foo file | grep -v bar

Muhtemelen egrep ile yapmanın çok zarif yolları var, ama düz eski grep ile nasıl gidilir?

EDIT: grep -v 'foo\|bar' filesadece GNU grep ile çalışıyor gibi görünüyor. Solaris'deyim. Bunun için bir çözüm var mı?


Garip bir soru çünkü ilk örnekte AND eşleştiriyorsunuz ve ikincisinde OR eşleştiriyorsunuz. Sonuç sadece çok özel koşullarda aynı olacaktır.
greenoldman

1
Hayır gerçek değil. İkinci örnekte, -vbayrak bir olumsuzlamadır. not(A or B) == not(A) and not(B)
rahmu

Yanıtlar:


21

grepHer ifadeyi -enormalde gördüğünüz gibi ilk seçenek olmayan argüman yerine bir argümanla ileterek tek bir komutta birden fazla test yapabilirsiniz :

$ grep -v -e foo -e bar file

Bu, komutunuzun yaptığı ile aynı şeyi söylüyor: file"foo" veya "bar" içermeyen satırları yazdırın .

Unutmayın, kaldırmanın bunu -vtamamen tersine çevirdiğini; mantıksal işlemi de değiştirir! "Foo" veya "bar" içeren tüm satırları alırsınız .


12

grep -Ev 'word1|word2' iyi çalışmalı


Alternatif olarak egrep -v 'word1|word2
egrep'i

Bunun Solaris grep ile çalışmadığı anlaşılıyor. GNU grep'i kurdum ve mükemmel çalıştım. Sorumumu Solaris'e özgü hale getirmek için düzenleyeceğim.
rahmu

2
@rahmu \|bir GNU grep uzantısıdır, ancak aynı şeyi -Eve |operatör ile taşınabilir bir şekilde elde edebilirsiniz .
Gilles 'SO- kötü olmayı bırak
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.