egrep 正则表达式 - 开头和结尾的单词相同

Sil*_*033 5 grep text-processing regular-expression

我想找到在行首和行尾具有相同单词的所有行。

例如:

goodword         fgdlakj 3t sfkl 43lk fkl goodword
bad sfa;lk3t   dgk;gs    34;kl bad334
singleword
Run Code Online (Sandbox Code Playgroud)

期望输出

goodword         fgdlakj 3t sfkl 43lk fkl goodword
singleword
Run Code Online (Sandbox Code Playgroud)

我的代码是:

egrep "(^.+)([ ]+.*\1)$"
Run Code Online (Sandbox Code Playgroud)

如果该行有 1 个以上的单词,它确实有效。但我也想要一行包含一个单词来匹配。

所以我试过:

egrep "(^.+)($|([ ]+.*\1)$)"
Run Code Online (Sandbox Code Playgroud)

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

jim*_*mij 7

我建议awk改用:

awk '$1==$NF' file
Run Code Online (Sandbox Code Playgroud)

此解决方案的优点是阅读起来更简单,其次您可以轻松更改字段分隔符(使用-F选项),例如。即使行首和行尾的空格数相同,也会匹配。


Cos*_*tas 7

jimmij的回答真的很好,但如果你坚持使用grep

grep -Ex '(\S+)(.*\1)?' file
Run Code Online (Sandbox Code Playgroud)

  • @glennjackman,无论如何 POSIX ERE 没有反向引用。 (2认同)