Saya mencoba memahami perbedaan antara grep -e
dan grep -E
. Sekarang grep manpage
saya dapat:
-E, --extended-regexp
Menafsirkan POLA sebagai ekspresi reguler yang diperluas (lihat di bawah).
-e POLA, --regexp = POLA
Gunakan POLA sebagai polanya; berguna untuk melindungi pola yang dimulai dengan -
Penjelasan di atas tidak masuk akal bagi saya.
Jadi, bisakah seseorang menjelaskannya kepada saya menggunakan examples
apa perbedaan antara keduanya dan kapan harus menggunakan opsi mana.
PS: Versi: grep (GNU grep) 2.10
-e
adalah hanya untuk ambigu ketika sebuah regex dimulai dengan tanda hubung. Jadigrep ---foo
berikanunrecognized option: ---foo
tetapi Anda dapat mengatakangrep -e ---foo
untuk menerima ekspresi reguler---foo
.Jawaban:
-e
hanya bendera untuk menunjukkan pola yang ingin Anda cocokkan.-E
mengontrol apakah Anda perlu keluar dari karakter khusus tertentu.man grep
menjelaskannya-E
sedikit lebih:sumber
echo "hello" | grep -o -e 'h|l'
saya tidak mendapatkan hasil karena|
kehilangan makna khusus dan ketika saya melakukannyaecho "hello" | grep -o -E 'h|l'
saya mendapatkan hasil yang diinginkan.echo "hello" | grep -o -e 'h' -e 'l'
akan bekerja jika Anda ingin membuang-E
dalam kasus ini.grep -e -o 'h|l'
akan cocok secara harfiahh|l
sementaragrep -e -o 'h\|l'
akan cocokh
ataul
dan dengan -E itu sebaliknyaJuga
grep -e
memungkinkan untuk menggunakan beberapa string untuk pencarian:'grep -e 'abc' -e 'def' -e '123'
akan mencari semua tiga dari string ini:abc
sertadef
dan123
.Ini bekerja sangat mirip dengan
grep 'abc\|def\|123'
tempat\|
berdirior
tetapi bisa sedikit lebih jelas untuk dibaca.Karena fakta paling penting
grep -E
sudah dijelaskan di sini, saya hanya ingin menambahkan apa yang saya simpulkan pada topik ini pada pertanyaan yang sangat mirip: Ekspresi Reguler untuk menemukan karakter ganda di Bashsumber
/ diperpanjang
Jadi, sekali lagi.
sumber
(
,)
,|
dll perlu menjadi-escape memiliki arti khusus dalam regexp dasar, tapi tidak di diperpanjang (di mana mereka harus melarikan diri untuk diperlakukan sebagai literal string)Hanya untuk menguraikan
-e
opsi.-e
sering opsional:identik dengan
kecuali, sebagaimana dinyatakan dalam Jawaban sebelumnya dan di halaman manual, ada beberapa pola pencarian, atau untuk melindungi pola yang dimulai dengan tanda hubung (-).
sumber