我想找到在行的开头和结尾具有相同单词的所有行。
例如:
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:]]*'