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)$"

如果该行有超过 1 个单词,它确实有效。但我也希望包含单个单词的行能够匹配。

所以我尝试:

egrep "(^.+)($|([ ]+.*\1)$)"

它不再起作用了 - 我不知道为什么。

答案1

我建议改用awk

awk '$1==$NF' file

该解决方案的优点是它更易于阅读,其次您可以轻松更改字段分隔符(带-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:]]*'

相关内容