Ekspresi grep berikut berhasil mendaftar semua file .exe dan .html di direktori dan sub direktori saat ini.
ls -R |grep -E .*[\.exe]$\|.*[\.html]$
Bagaimana cara membalikkan hasil ini untuk mencantumkan yang bukan .html atau .exe sebagai gantinya. (Yaitu !=
,.)
-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
.atau
Anda juga dapat melakukan hal yang sama menggunakan
find
:Info lebih lanjut di sini .
sumber
find
perintah adalah solusi yang paling semantik untuk masalah XY ini. Menggabungkanls
dangrep
untuk tujuan ini tampaknya paling jelek. Ini harus menjadi jawaban yang diterima. (+1)Tambahkan
-v
opsi kegrep
perintah Anda untuk membalikkan hasilnya.sumber
sumber
Seperti yang dinyatakan beberapa kali, pembalikan dicapai oleh
-v
opsi untukgrep
. Izinkan saya menambahkan catatan (semoga menghibur) yang bisa Anda temukan sendiri dengan membacagrep
teks bantuan:sumber