我知道我可以用来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