如何仅在文件中的一行中查找两个单词,它们之间存在特定数量的随机单词

How to grep only two words in a line in file between them specific number of random words present

给定一个包含以下内容的文件:

Feb 1 ohio a1 rambo
Feb 1 ny   a1 sandy
Feb 1 dc   a2 rambo
Feb 2 alpht a1 jazzy

我只想要包含 Feb 1rambo 的行数。

按照@Marc 的建议试试这个,

grep 'Feb 1.*rambo' file |wc -l

如果两个字符串的位置不确定,下面的命令将很有用,

grep 'rambo' file|grep 'Feb 1'|wc -l

输出将是,

2

这是我试过的,

您可以使用 awk 更有效地执行此操作:

$ awk '/Feb 1/ && /rambo/' file
Feb 1 ohio a1 rambo
Feb 1 dc   a2 rambo

要计算匹配项:

$ awk '/Feb 1/ && /rambo/ {sum++} END{print sum}' file
2

说明

  • awk '/Feb 1/ && /rambo/' 是说:匹配所有匹配 Feb 1rambo 的行。当它的计算结果为 True 时,awk 执行它的默认行为:打印行。

  • awk '/Feb 1/ && /rambo/ {sum++} END{print sum}' 做同样的事情,只是不是打印行,而是递增 var sum。当文件被完全扫描后,它进入 END 块,打印 var sum.

  • 的值

2 月 1 日总是在 rambo 之前吗?如果是:

grep -c "Feb 1 .* rambo"

awk 解决方案可能更清晰,但这是一个很好的 sed 技术:

 sed -n '/Feb 1/{/rambo/p; }' | wc -l