Jadi saya mencoba menemukan kata-kata 6 huruf yang terdiri dari satu karakter yang diulang tiga kali diikuti oleh karakter lain yang diulang tiga kali. Misalnya aaabbb
atau oookkk
.
Aku sedang mencoba:
grep -E "[a-z]\1{3}\S[a-z]\1{3}" filename
Pertama, apakah regex itu benar? Kedua mengapa saya mengerti grep: Invalid back reference
?
command-line
grep
regular-expression
Sorotan Pabrik
sumber
sumber
aaabbbfoobar
? Bagaimana denganaaaabbb
? Idealnya, tunjukkan kepada kami beberapa contoh input dan output yang Anda inginkan.grep -E '([a-z]{2})([0-9]{2})\2\1'
akan cocokaa9999aa
.oookkk
(tidak lebih dari 6 karakter) BUKAN kata-kata yang mengandungoookkk
sepertioookkkfoobar
grep -w
contoh yang saya berikan dalam jawaban saya.aaaaaa
atau apakah Anda memerlukan setidaknya dua karakter yang berbeda? Silakan pertimbangkan memberi kami contoh input dan output yang diinginkan.Jawaban:
Tidak, itu tidak benar. Saya tidak tahu apa yang
\1{3}
seharusnya tetapi itulah yang menyebabkan masalah Anda. Jika Anda ingin menemukan garis yang berisi tiga karakter berulang yang diikuti oleh tiga karakter berulang lainnya, Anda dapat menggunakan ini:The
\1
mengacu pertama ditangkap kelompok. Anda dapat menangkap grup dengan menggunakan tanda kurung. Kemudian,\1
adalah kelompok pertama seperti itu dan\2
yang kedua dan seterusnya. Karena Anda tidak memiliki grup yang ditangkap,grep
mengeluh tentang referensi yang tidak valid karena tidak ada referensi. Jadi, dalam regex di atas, tanda kurung menangkap kedua kelompok. Kemudian, Anda inginkan{2}
dan bukan{3}
karena pertandingan awal juga dihitung.Anda tidak menentukan apakah Anda perlu kecocokan untuk menjadi kata atau apakah Anda juga ingin mencocokkan dalam kata-kata. Jika Anda ingin seluruh kata cocok (dan mengecualikan hal-hal seperti
aaaabbb
, gunakan ini sebagai gantinya:Untuk mencetak hanya bagian yang cocok dari baris (kata) dan bukan seluruh baris, gunakan (GNU grep saja):
sumber