したがって、1つの文字が3回繰り返され、その後に別の文字が3回繰り返される6文字の単語を見つけようとしています。たとえば、aaabbb
またはoookkk
。
やっています:
grep -E "[a-z]\1{3}\S[a-z]\1{3}" filename
まず、正規表現は正しいですか?第二に、なぜ私はgrep: Invalid back reference
?
いいえ、正しくありません。 \1{3}
はそうであるはずですが、それが問題の原因です。 3つの繰り返し文字とその後に続く3つの繰り返し文字を含む行を検索する場合は、次のように使用できます。
grep -E '([a-z])\1{2}([a-z])\2{2}'
\1
は最初のcapturedグループを指します。括弧を使用してグループをキャプチャできます。次に、\1
はそのような最初のグループであり、\2
は2番目などです。キャプチャされたグループがなかったため、grep
は参照するものがないため、無効な参照について不平を言っていました。したがって、上記の正規表現では、括弧が2つのグループをキャプチャしています。次に、{2}
ではなく{3}
最初の一致もカウントされるため。
一致が単語である必要があるかどうか、または単語内で一致するかどうかも指定しません。 Word全体を一致させる(およびaaaabbb
などを除外する)場合は、代わりにこれを使用します。
grep -wE '([a-z])\1{2}([a-z])\2{2}'
行全体ではなく、行の一致した部分(Word)のみを印刷するには、(GNU grepのみ)を使用します。
grep -owE '([a-z])\1{2}([a-z])\2{2}'