如何使用grep/egrep在文件中找到重复的单词?

Mou*_*use 6 regex unix bash grep word-boundary

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

我试过了:

egrep "(\<[a-zA-Z]+\>) \1" file.txt
Run Code Online (Sandbox Code Playgroud)

egrep "(\b[a-zA-Z]+\b) \1" file.txt
Run Code Online (Sandbox Code Playgroud)

但出于某种原因,这些都认为重复的事情不是!例如,它认为字符串"单词单词"符合标准,尽管单词边界条件\>\b.

ric*_*ici 6

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

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

egrep "(\b[a-zA-Z]+) \1\b" file.txt
Run Code Online (Sandbox Code Playgroud)

这与:

egrep "\b([a-zA-Z]+) \1\b" file.txt
Run Code Online (Sandbox Code Playgroud)

模式中的空格强制一个单词边界,所以我删除了多余的\bs。如果你想更明确,你可以把它们放在:

egrep "\<([a-zA-Z]+)\> \<\1\>" file.txt
Run Code Online (Sandbox Code Playgroud)