期待どおりに機能しない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