Apakah ada cara yang lebih sederhana untuk melakukan ini?
grep -v foo file | grep -v bar
Mungkin ada cara yang sangat elegan untuk melakukannya dengan egrep, tetapi bagaimana cara menggunakan grep tua biasa?
EDIT: grep -v 'foo\|bar' file
tampaknya hanya berfungsi dengan GNU grep. Saya menggunakan Solaris. Ada solusi untuk itu?
-v
bendera adalah negasi.not(A or B) == not(A) and not(B)
Jawaban:
Anda dapat memiliki beberapa pengujian dalam satu
grep
perintah dengan melewatkan setiap ekspresi dengan-e
argumen alih-alih sebagai argumen non-opsi pertama seperti yang biasanya Anda lihat:Itu mengatakan hal yang sama dengan perintah Anda: mencetak baris
file
yang tidak mengandung "foo" atau "bar".Perlu diingat bahwa menghapus
-v
sepenuhnya membalikkan ini; itu mengubah operasi logis juga! Anda mendapatkan semua baris yang berisi "foo" atau "bar".sumber
grep -Ev 'word1|word2'
harus bekerja dengan baiksumber
egrep -v 'word1|word2
\|
adalah ekstensi grep GNU, tetapi Anda dapat mencapai hal yang sama dengan cara yang portabel dengan-E
dan|
operator.