Regex untuk “atau” beberapa kata dalam grep


12
[Computer]$ grep "foo|bar" filename

Saya mengerti perintah di atas harus mengembalikan setiap baris dalam nama file di mana ada "foo" atau "bar". Halaman manual mengkonfirmasi | sebagai Regex atau simbol dan kode berfungsi untuk "foo" dan "bar" secara mandiri. Apa yang saya lewatkan?

Jawaban:


21

grep menggunakan ekspresi reguler dasar (BRE) secara default. Dari halaman manual:

Basic vs Extended Regular Expressions: Dalam ekspresi reguler dasar, meta-karakter?, +, {, |, (, Dan) kehilangan makna khusus mereka; alih-alih gunakan versi backslashed \ ?, +, {, \ |, (, dan).

Jadi, Anda harus melarikan diri dari |:

grep "foo\|bar" filename 

atau nyalakan ekspresi reguler yang diperluas:

grep -E "foo|bar" filename

Saya melihat itu di halaman manual dan disalahpahami. Saya pikir itu berarti \ | akan membuatnya mencari ekspresi lengkap "foo | bar" yang bertentangan dengan ekspresi individu. Terima kasih atas tanggapan yang cepat!
Ocasta Eshu

4
Anda juga dapat menggunakan egrep(alias untuk grep -E) grep.
Bicara
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.