Saya mencari ekspresi reguler yang menemukan semua kemunculan karakter ganda dalam teks, daftar, dll. Di baris perintah (Bash).
Main Pertanyaan : Apakah ada cara sederhana untuk mencari urutan seperti aa
, ll
, ttttt
, dll di mana salah satu mendefinisikan ekspresi reguler yang terlihat untuk n kejadian dari karakter yang sama dengan? Apa yang saya cari adalah mencapai ini pada level yang sangat mendasar. Di baris perintah. Di Linux Shell.
Setelah beberapa penelitian saya datang ke jawaban berikut - dan pertanyaan yang dihasilkan dari mereka, jadi mereka hanya memberi saya petunjuk di mana solusinya. Tapi:
a) (e) grep dan masalah backslash
grep 'a\{2\}'
mencariaa
egrep'a{2}'
mencariaa
Pertanyaan: Apakah perlunya mengatur serangan balik benar-benar terikat pada perintah yang saya gunakan? Jika demikian, adakah yang bisa memberi saya petunjuk apa lagi yang harus diperhitungkan saat menggunakan (e) grep di sini?
b) Saya menemukan jawaban ini di sini untuk pertanyaan saya, meskipun itu bukan yang saya cari:
grep -E '(.)\1' filename
mencari entri dengan karakter yang sama muncul lebih dari sekali tetapi tidak menanyakan seberapa sering . Ini dekat dengan apa yang saya cari, tetapi saya masih ingin mengatur sejumlah pengulangan.
Saya mungkin harus membagi ini menjadi dua atau lebih pertanyaan, tetapi kemudian saya tidak ingin membanjiri situs yang luar biasa ini di sini.
PS: Pertanyaan lain, mungkin off topic tapi: apakah in
, inside
, at
atau on the shell
. Dan apakah on the command line
benar
egrep
jika saya perlu ekspresi reguler (sebagai lawan dari pencocokan string sederhana) sehingga saya tidak perlu khawatir mengingat perbedaan antaragrep
dua jenis ekspresi reguler.grep '\(.\)\1\{3\}'
juga standar,grep -E '(.)\1{3}'
bukan.Ini akan mencari 2 kejadian atau lebih dari karakter yang sama:
Jika awk Anda memiliki opsi -o, ini akan mencetak setiap kecocokan pada baris baru ..
Untuk menemukan kecocokan dengan 3 pencocokan tepat:
Atau 3 atau lebih:
dll ..
sunting
Sebenarnya @stephane_chazelas benar tentang referensi kembali dan -E. Saya sudah lupa tentang itu. Saya mencobanya di BSD grep dan GNU grep dan berfungsi di sana tetapi tidak di beberapa greps lainnya. Anda harus menggunakan salah satu versi di bawah ini ..
Versi grep reguler:
The
-o
pilihan juga tidak standar grep BTW (mungkin jika grep Anda mengerti -o juga dapat melakukan referensi kembali) ..Catatan :
grep -E '(.)\1{2,}'
file dangrep '\(.\)\1\{2\}'
file salah seperti yang ditunjukkan alexis dan harus diabaikan ..sumber
-E
opsigrep
tidak akan banyak membantu? Ini akan menjelaskan banyak hal, misalnya mengapa saya membuang banyak waktu untuk mencari kesalahan saya!+
operator .. Saya akan memposting contoh juga.grep -E '(.)\1{2}'
tidak persis "Temukan kecocokan dengan 3 kecocokan persis". Sementara itu akan cocok persis tiga karakter identik, mereka dapat tertanam dalam string yang lebih panjang; misalnya, itu akan cocok dengan string 5-simbolAAAAA
. (Dan jika ada 6 atau lebih simbol berturut-turut, itu akan cocok lebih dari sekali).Pertama, terima kasih atas komentar dan saran pendukung Anda. Ternyata saya sudah cukup dekat dengan jawabannya.
The Main Issue adalah tentang:
Jawaban singkat :
Perintah [variasi] berikut ini akan mengulang
a
setidaknya satu kali dan waktu yang tidak terbatasgrep 'a\{1,}
grep -E \(a\)\{1,\}
egrep a{1,}
atau, dengan GNU Regular Expressions tersedia
grep a\+
Jumlah pengulangan diatur di dalam kurung keriting, melalui pola
{min,max}
→{n}
ulangi tepatn
waktu,{n,}
ulangi setidaknyan
kali dan{n,m}
ulangi setidaknyan
tapi paling banyakm
kali.Dengan demikian, sebagai akibatnya, mengangkat masalah sekunder :
Jawaban singkat : Ya, penggunaan backslash tergantung pada apakah seseorang menggunakan
grep
atauegrep
grep
: backslash mengaktifkan metacharacters [menggunakan Basic Regular Expressions]egrep
backslash de -activates metakarakter [kegunaan Diperpanjang Regular Expressions]Karena ini adalah jawaban singkatnya, saya ingin memberikan kepada mereka yang mengalami masalah yang sebanding, saya menambahkan ringkasan dasar saya tentang apa yang tampaknya harus disadari, bekerja dengan
grep
danegrep
.Ekspresi Reguler, Extended, dan GNU
Ekspresi Reguler Dasar
Digunakan dalam
grep
,ed
dansed
perintahSet fitur Ekspresi Reguler Dasar adalah:
? [ . \ )
dll. Diaktifkan melalui garis miring terbalik. Jika tidak ada garis miring terbalik mereka akan diambil sebagai (bagian dari) istilah pencarian.^ $ \<
dan\>
didukung tanpa backslash\b
,\s
, dll]GNU Basic Regular Expressions menambahkannya
\?
ulangi karakter nol atau satu kali (c\?
cocokc
dancc
) dan merupakan alternatif untuk\{0,1\}
\+
ulangi karakter setidaknya satu kali (c\+
cocokcc
,cccccccc
dll.) dan merupakan alternatif untuk\{1,\}
\|
didukung (mis.grep a\|b
akan mencaria
ataub
grep -E
memungkinkan perintah untuk menggunakan seluruh rangkaian Ekspresi Reguler Diperpanjang:Extended Regular Expressions [ERE]
Digunakan dalam
egrep
,awk
danemacs
merupakan Set Dasar ditambah beberapa fitur.GNU Memperpanjang Ekspresi Reguler
menambahkan fitur berikut
Dua tautan akan mengarahkan satu ke regular-expressions.info yang, di samping dukungan awsome yang saya dapatkan di sini, benar-benar banyak membantu saya.
sumber