Yanıtlar:
Komut satırı seçeneğini kullanın -v
veya --invert-match
,
ls -R |grep -v -E .*[\.exe]$\|.*[\.html]$
grep -v
veya
grep --invert-match
Aynı şeyi aşağıdakileri kullanarak da yapabilirsiniz find
:
find . -type f \( -iname "*" ! -iname ".exe" ! -iname ".html"\)
Daha fazla bilgi burada .
find
Komut bu XY sorunun en semantik bir çözümdür. Birleştirmek ls
ve grep
bu amaç için en iyi ihtimalle kaba gibi görünüyor. Bu kabul edilen cevap olmalı. (+1)
Sonuçları tersine çevirme -v
seçeneğini grep
komutunuza ekleyin .
grep "subscription" | grep -v "spec"
-v
/--invert-match
ille dönüş kodu olsun çevirmek olmazgrep
başarılı işletildiğini gösterir, ancak bunun yerine başka türlü eşleşti olmaz çizgileri eşleşecek. Dönüş kodunu ters çevirmek isteyenler (yani, tüm satırlar en az bir yerine desenle eşleşmiyorsa başarılı olmalıdır) kullanmalıdır! grep
. Bu bulgular, koşullu ifadelerde örneğin kullanın:if ! ls | grep -qE ".(\.exe)$"; then echo No .exe files in $(pwd); fi
.