単純なgrep表現

単純なgrep表現

期待どおりに機能しないgrep式があり、その理由を理解できません。

最初の式は同じ文字で始まり、終わる行を探します。私が使う表現なのに..

grep -E '(.).*\1$' input

2番目の表現は、2番目と最後の2番目の文字が同じ行を見つけるという点で非常に似ています。

grep -E '(.)(.).*\2.$' input

最後の表現は、1つの単語だけを含み、句読点で終わる行を見つけることです。

grep -E '(\w){1}.*[[:punct:]]$' input

なぜこれがうまくいかないのか理解できません。私は何かが間違っているのでしょうか、それとも単純な間違いですか?

答え1

君の行を抜けたアンカー脱字コード)。以下は、行全体を一致させるように変更されたコマンドです(サブストリングは一致しません)。

grep -E '^(.).*\1$' input

grep -E '^(.)(.).*\2.$' input

grep -E '^(\w){1}.*[[:punct:]]$' input

2番目と3番目のコマンドを変更することもできます。

2番目のコマンドには2つは必要ありません。キャプチャグループ。次のいずれかでこれを実行できます。

grep -E '^.(.).*\1.$' input

3番目のコマンドは正しくありません。複数の単語を含む文字列と一致します。修正されたバージョンは次のとおりです。

grep -E '^\w+[[:punct:]]$' input

関連情報