grep コマンドと逆参照の使用

grep コマンドと逆参照の使用

非常に基本的な質問なのに理解できませんね。私はLinuxを学んでいますが、私が受け取る質問の1つは次のとおりです。

*「sentimentalment」という単語には、同じ文字の3つが3回登場します(例:「ent」)。 「blablablam」という単語には、同じ3文字(「bla」など)が3回繰り返されることがあります。

たとえば、「sentimentalment」や「blayblapblam」のように3文字が3回繰り返されますが、小文字の「d」で始まる単語はいくつありますか? /usr/share/dict/wordsを可能な単語のリストとして使用し、grepを使用して答えを見つけます。 「d」は、3文字の文字列を検出するときに考慮される文字の1つではありません。 *

これまでは、同じ3文字が2回表示されるインスタンスを返すことができます。

grep -E '^d(...).*\1' /usr/share/dict/words > output

私には、「d」で始まる単語を見つけて、同じグループ(1)が再び表示される前に、ゼロ文字以上の3文字の組み合わせを見つけます。

私は以下を試しました。

grep -E '^d(...).*\1.*\1' /usr/share/dict/words > output

私の理解が正しい場合(明らかにそうではありません)、最初のグループが返され、ゼロ個以上の文字が返され、もう一度最初のグループが返されます。

誰かが私が間違っている場所を指摘できますか?助けてくれてありがとう。

ベストアンサー1

この3文字を修正したようですd。たぶん、次のようなものが必要かもしれません。

grep -E '^d.*(...).*\1' /usr/share/dict/words > output

その後、3つのパターン検索

grep -E '^d.*(...).*\1.*\1' /usr/share/dict/words > output

移植性の理由から、拡張正規表現と逆参照を組み合わせることは避ける必要があるため、使用する方が良いです。

grep '^d.*\(...\).*\1.*\1' /usr/share/dict/words > output

おすすめ記事