Jawaban:
Gunakan opsi baris perintah -v
atau --invert-match
,
ls -R |grep -v -E .*[\.exe]$\|.*[\.html]$
grep -v
atau
grep --invert-match
Anda juga dapat melakukan hal yang sama menggunakan find
:
find . -type f \( -iname "*" ! -iname ".exe" ! -iname ".html"\)
Info lebih lanjut di sini .
find
perintah adalah solusi yang paling semantik untuk masalah XY ini. Menggabungkan ls
dan grep
untuk tujuan ini tampaknya paling jelek. Ini harus menjadi jawaban yang diterima. (+1)
Tambahkan -v
opsi ke grep
perintah Anda untuk membalikkan hasilnya.
grep "subscription" | grep -v "spec"
-v
/--invert-match
tidak harus membalik apakah kode pengembaliangrep
mengindikasikan eksekusi yang sukses, tetapi sebaliknya akan cocok dengan baris yang jika tidak akan dicocokkan. Mereka yang ingin membalikkan kode pengembalian (yaitu berhasil jika semua baris tidak cocok dengan pola, bukan setidaknya satu) harus digunakan! grep
. Temuan ini digunakan dalam ekspresi kondisional, misalnya:if ! ls | grep -qE ".(\.exe)$"; then echo No .exe files in $(pwd); fi
.