Apakah Anda yakin apa yang Anda inginkan sedang terjadi? Ketika Anda menjalankan ls /directory | grep '[^term]'
Anda pada dasarnya memahami untuk tidak ter huruf. Ini berarti jika suatu file memiliki huruf lain dalam namanya itu akan tetap muncul di output ls
. Ambil direktori berikut sebagai contoh:
$ ls
alpha brave bravo charlie delta
Sekarang jika saya menjalankan ls |grep '^[brav]'
saya mendapatkan yang berikut:
$ ls |grep '^[brav]'
alpha
brave
bravo
Seperti yang Anda lihat, saya tidak hanya mendapatkan brave
dan bravo
saya juga mendapat alpha
karena kelas karakter []
akan mendapatkan surat dari daftar itu.
Akibatnya, jika saya menjalankan ls |grep '[^brav]'
saya akan mendapatkan semua file yang tidak mengandung karakter brav di mana saja dalam nama.
$ ls |grep '[^brav]'
alpha
bravo
brave
charlie
delta
Jika Anda perhatikan itu termasuk seluruh daftar direktori karena semua file memiliki setidaknya satu huruf yang tidak termasuk dalam kelas karakter.
Jadi seperti yang dikatakan Kanvuanza, untuk memahami kebalikan dari "istilah" yang bertentangan dengan karakter t e r m
Anda harus melakukannya menggunakan grep -v
.
Contohnya:
$ ls |grep -v 'brav'
alpha
charlie
delta
Juga jika Anda tidak ingin file yang memiliki karakter apa pun di kelas digunakan grep -v '[term]'
. Itu akan membuat file tidak muncul yang memiliki karakter tersebut. (Jawaban Kanvuanza)
Contohnya:
$ ls |grep -v '[brav]'
Seperti yang Anda lihat tidak ada file yang terdaftar karena semua file dalam direktori ini termasuk setidaknya satu huruf dari kelas itu.
Tambahan:
Saya ingin menambahkan bahwa menggunakan PCRE dimungkinkan untuk menggunakan hanya regex untuk memfilter menggunakan ekspresi negate. Untuk melakukan ini, Anda akan menggunakan sesuatu yang dikenal sebagai negatif melihat-depan regex: (?!<regex>)
.
Jadi dengan menggunakan contoh di atas, Anda dapat melakukan sesuatu seperti ini untuk mendapatkan hasil yang Anda inginkan tanpa menggunakan grep
flag.
$ ls | grep -P '^(?!brav)'
alpha
charlie
delta
Untuk mendekonstruksi regex itu, pertama-tama cocok pada awal baris ^
dan kemudian mencari string yang tidak cocok brav
untuk diikuti sesudahnya. Hanya alpha
,, charlie
dan delta
cocokkan sehingga hanya itu yang dicetak.
grep
baris dimulai dengan istilah. Atau Anda ingin melihat baris yang tidak mengandung istilah sama sekali?