我需要在unix(bash)中使用egrep(或grep -e)在文件中找到重复的单词

我试过了:

egrep "(\<[a-zA-Z]+\>) \1" file.txt


egrep "(\b[a-zA-Z]+\b) \1" file.txt

但是出于某种原因,这些人认为事情不是重复!
例如,尽管单词边界条件为\>\b,它仍认为字符串“单词words”符合标准。

最佳答案

\1匹配第一次捕获匹配的任何字符串。这与匹配与第一次捕获所匹配的模式不同。因此,即使\b在捕获括号内,匹配单词边界的第一个捕获也不再相关。

如果您希望第二个实例也位于单词边界上,则需要这样说:

egrep "(\b[a-zA-Z]+) \1\b" file.txt

这与以下内容没有什么不同:
egrep "\b([a-zA-Z]+) \1\b" file.txt

模式中的空格会强制单词边界,因此我删除了多余的\b。如果您想更明确一点,可以将它们放在:
egrep "\<([a-zA-Z]+)\> \<\1\>" file.txt

关于regex - 如何使用grep/egrep在文件中找到重复的单词?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33396629/

10-11 18:06