如何搜索在一行中多次出现的字符串?

如何搜索在一行中多次出现的字符串?

我知道我可以用来grep搜索字符串。但是,如果我希望输出仅显示我搜索的字符串多次出现的行,该怎么办?我更喜欢grep

为了澄清,我需要打印关键字出现多次的行(即两次或以上,或至少两次)。但我并不是指恰好有两条线的线。

答案1

如果搜索字符串可以出现在该行的任何位置,则您可以grep 'str.*str'至少进行两个匹配。

如果你想多次匹配字符串,例如至少三次,你可以这样做grep '\(.*str\)\{3\}'

答案2

不可能搜索 2 次或更多出现的一个字符串在使用 grep 的行中,因为您需要使用正则表达式构造来连接“字符串”,然后字符串不再是字符串,它们是正则表达式。您需要使用 awk 来代替,例如查找字符串的 2 次或多次出现.*

$ echo 'foo.*bar' | awk -v str='.*' '(s=index($0,str)) && index(substr($0,s+length(str)),str)'
$
$ echo 'foo.*bar.*etc' | awk -v str='.*' '(s=index($0,str)) && index(substr($0,s+length(str)),str)'
foo.*bar.*etc

相关内容