如何仅在文件中的一行中查找两个单词,它们之间存在特定数量的随机单词
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 1
和 rambo
的行数。
按照@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 1
和 rambo
的行。当它的计算结果为 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
给定一个包含以下内容的文件:
Feb 1 ohio a1 rambo
Feb 1 ny a1 sandy
Feb 1 dc a2 rambo
Feb 2 alpht a1 jazzy
我只想要包含 Feb 1
和 rambo
的行数。
按照@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 1
和rambo
的行。当它的计算结果为 True 时,awk 执行它的默认行为:打印行。awk '/Feb 1/ && /rambo/ {sum++} END{print sum}'
做同样的事情,只是不是打印行,而是递增 varsum
。当文件被完全扫描后,它进入END
块,打印 varsum
. 的值
2 月 1 日总是在 rambo 之前吗?如果是:
grep -c "Feb 1 .* rambo"
awk 解决方案可能更清晰,但这是一个很好的 sed 技术:
sed -n '/Feb 1/{/rambo/p; }' | wc -l