2010-12-07 23 views
145

Aşağıdaki grep ifadesi, geçerli dizin ve alt dizinlerdeki tüm .exe ve .html dosyalarını başarıyla listeler.Bir grep ifadesi nasıl çevrilir?

ls -R |grep -E .*[\.exe]$\|.*[\.html]$ 

Bu sonucu, bunun yerine .html veya .exe olmayanları listelemek için nasıl tersine çevirebilirim? (Yani, != budur.)

cevap

219

kullanın komut satırı seçeneği -v veya --invert-match,

ls -R |grep -v -E .*[\.exe]$\|.*[\.html]$ 
58
grep -v 

veya

grep --invert-match 

Sen find kullanarak aynı şeyi yapmak da yapabilirsiniz:

find . -type f \(-iname "*" ! -iname ".exe" ! -iname ".html"\) 

Daha fazla bilgi here.

+2

'find' komutu bu XY sorununa en semantik çözümdür. Bu amaç için 'ls' ve' grep’i birleştirmek en iyi ihtimalle hacky gibi görünüyor. Bu kabul edilen cevap olmalı. (+1) – Eric

+2

@Eric OP gerekliliklerinden bağımsız olarak, bir grep ifadesinin dönüştürülmesi, dosya bulmaktan çok daha fazlası için yararlıdır. Çoğu insanın buraya gelmesinin sebebi şüpheliyim. – byxor

24

Sonuçları ters çevirmek için grep komutuna -v seçeneğini ekleyin.

4
grep "subscription" | grep -v "spec"