Ini benar-benar dua pertanyaan, dan seharusnya dipisahkan. Tapi karena jawabannya relatif sederhana, saya akan taruh di sini. Jawaban ini untuk GNU grep
khusus.
a) egrep
sama dengan grep -E
. Keduanya menunjukkan bahwa "Extended Regular Expressions" harus digunakan sebagai pengganti grep
Ekspresi Reguler bawaan. grep
membutuhkan garis miring terbalik untuk Regular Expressions biasa.
Dari man
halaman:
Ekspresi Reguler Dasar vs Diperpanjang
Dalam ekspresi reguler dasar, karakter meta ? , + , { , | , ( , dan ) kehilangan arti khusus mereka; alih-alih gunakan versi garis miring terbalik \? , \+ , \{ , \| , \( , dan \) .
Lihat man
halaman untuk detail tambahan tentang konvensi historis dan portabilitas.
b) Gunakan egrep '(.)\1{N}'
dan ganti N
dengan jumlah karakter yang ingin Anda ganti minus satu (karena titik cocok dengan yang pertama). Jadi jika Anda ingin mencocokkan karakter yang diulang sebanyak empat kali, gunakan egrep '(.)\1{3}'
.
Ini akan mencari 2 kejadian atau lebih dari karakter yang sama:
grep -E '(.)\1+' file
Jika awk Anda memiliki opsi -o, ini akan mencetaknya setiap kecocokan pada baris baru..
grep -Eo '(.)\1+' file
Untuk menemukan kecocokan dengan tepat 3 kecocokan:
grep -E '(.)\1{2}' file
Atau 3 atau lebih:
grep -E '(.)\1{2,}' file
dll..
edit
Sebenarnya @stephane_chazelas benar tentang referensi belakang dan -E. Saya sudah lupa tentang itu. Saya mencobanya di BSD grep dan GNU grep dan berfungsi di sana tetapi tidak di beberapa grep lainnya. Anda harus menggunakan salah satu versi di bawah ini..
Versi grep reguler:
grep '\(.\)\1\{1,\}' file
grep -o '\(.\)\1\{1,\}' file
grep '\(.\)\1\{2\}' file
grep '\(.\)\1\{2,\}' file
-o
opsi juga bukan standar grep BTW (mungkin jika grep Anda mengerti -o itu juga bisa melakukan referensi kembali)..
Catatan :grep -E '(.)\1{2,}'
file dan grep '\(.\)\1\{2\}'
file salah seperti yang ditunjukkan alexis dan harus diabaikan..
Pertama, terima kasih atas komentar dan saran dukungan Anda. Ternyata saya sudah cukup dekat dengan jawabannya.
Masalah Utama adalah tentang:
Apakah ada cara sederhana untuk mencari n kejadian dengan karakter yang sama, mis.
aa
,tttttt
Jawaban singkat :
Perintah [variasi] berikut akan mengulang a
setidaknya satu kali dan tidak terbatas
grep 'a\{1,}
grep -E \(a\)\{1,\}
egrep a{1,}
atau, dengan GNU Regular Expressions tersediagrep a\+
Jumlah pengulangan diatur di dalam kurung kurawal, melalui pola {min,max}
→ {n}
ulangi tepat n
kali, {n,}
ulangi setidaknya n
kali dan {n,m}
ulangi setidaknya n
tetapi paling banyak m
kali.
Dengan demikian, sebagai konsekuensinya, mengangkat masalah sekunder :
Apakah perlunya menetapkan serangan balik terikat pada perintah yang saya gunakan?
Jawaban singkat :Ya, penggunaan garis miring terbalik tergantung pada apakah seseorang menggunakan grep
atau egrep
grep
:garis miring terbalik mengaktifkan metakarakter [menggunakan Ekspresi Reguler Dasar]egrep
garis miring terbalik de -mengaktifkan metakarakter [menggunakan Extended Regular Expressions]
Karena ini adalah jawaban singkatnya, saya ingin memberikan kepada mereka yang mengalami masalah serupa, saya menambahkan ringkasan dasar saya tentang apa yang tampaknya harus diperhatikan, bekerja dengan grep
dan egrep
.
Ekspresi Reguler Dasar, Diperluas, dan GNU
Ekspresi Reguler Dasar
Digunakan di grep
, ed
dan sed
perintah
Fitur kumpulan Ekspresi Reguler Dasar adalah:
- Kebanyakan Karakter Meta, mis.
? [ . \ )
dll. diaktifkan melalui garis miring terbalik. Jika tidak ada garis miring terbalik, kata tersebut akan diambil sebagai (bagian dari) istilah penelusuran. ^ $ \<
dan\>
didukung tanpa garis miring terbalik- Tidak ada karakter steno [
\b
,\s
, dll.]
GNU Ekspresi Reguler Dasar ditambahkan ke ini
\?
ulangi karakter nol atau satu kali (c\?
cocok denganc
dancc
) dan merupakan alternatif untuk\{0,1\}
-
\+
ulangi karakter setidaknya satu kali (c\+
cocok dengancc
,cccccccc
dll.) dan merupakan alternatif untuk\{1,\}
-
\|
didukung (mis.grep a\|b
akan mencaria
ataub
grep -E
mengaktifkan perintah untuk menggunakan seluruh rangkaian Extended Regular Expressions:
Extended Regular Expressions [ERE]
Digunakan di egrep
, awk
dan emacs
adalah Set Dasar plus beberapa fitur.
- Metakarakter dinonaktifkan melalui garis miring terbalik
- Tidak ada referensi balik
- else:banyak hal ajaib yang biasanya dapat dilakukan oleh Regular Expression
GNU Perluas Ekspresi Reguler
menambahkan fitur berikut
- kelas steno
- bilangan
Kedua tautan tersebut akan mengarahkan satu ke ekspresi-reguler.info yang, selain dukungan luar biasa yang saya dapatkan di sini, sangat membantu saya.