行の始めと終わりに同じ単語を含むすべての行を見つけたいです。
たとえば、
goodword fgdlakj 3t sfkl 43lk fkl goodword
bad sfa;lk3t dgk;gs 34;kl bad334
singleword
希望の出力
goodword fgdlakj 3t sfkl 43lk fkl goodword
singleword
私のコードは次のとおりです
egrep "(^.+)([ ]+.*\1)$"
行に複数の単語がある場合は機能します。しかし、一つの単語を含む行も一致させたいと思います。
だから私は次のことを試みます:
egrep "(^.+)($|([ ]+.*\1)$)"
もう動作しません。理由がわからない。
答え1
代わりに、以下を使用することをお勧めしますawk
。
awk '$1==$NF' file
このソリューションの利点は、読みやすく、2番目にフィールド区切り文字(-F
オプションを使用)を簡単に変更できることです。行の先頭と末尾のスペースの数が同じでも一致します。
答え2
もちろんいいねプレハブ牛革回答しかし続けるならgrep:
grep -Ex '(\S+)(.*\1)?' file
答え3
POSIXの場合、grep
これは次のとおりですawk '$1 == $NF'
。
grep -x '[[:blank:]]*\([^[:blank:]]\{1,\}\)\([[:blank:]]\(.*[[:blank:]]\)\{0,1\}\1\)\{0,1\}[[:blank:]]*'