egrep正規表現 - 始まりと終わりの同じ単語

egrep正規表現 - 始まりと終わりの同じ単語

行の始めと終わりに同じ単語を含むすべての行を見つけたいです。

たとえば、

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:]]*'

関連情報