我试过以下
grep 'test' testdoc|wc -l
我得到了匹配字符串的数量。但我需要得到计数并打印匹配的线。任何人都可以帮助我。
答案 0 :(得分:1)
awk
:
grep 'test' testdoc|awk 'END{print NR}1'
在awk
中, 1 始终评估为true,它执行默认操作{print $0}
- 打印存储在$0
NR 是当前记录/行的编号,在 END块(或文件的最后一行)是文件中的行数。
执行所有 awk 代码后执行END 块。所以这是要执行的最后一个 awk 代码。
答案 1 :(得分:1)
像这样:
section
grep pattern file | tee >(wc -l)
打印找到的所有行tee
,然后将它们传递给计算行数的进程。它就像管道中的grep
关节,水在一侧流出,另外两个流出 - 即分流器。
请注意,这称为"流程替换" ,并且是T
特定的构造,bash
和{{1}之间没有空格}}
您也可以使用>
这样做:
(
那说...... "如果该行与awk
匹配,则打印它并递增awk '/pattern/{print;n++} END{print n+0}' file
。最后,打印pattern
- 添加零后,如果没有匹配则确保它是一个不是空字符串的数字。"
答案 2 :(得分:1)
grep 'test' testdoc|wc -l
计算模式出现的行数,它等于
grep -c 'test' testdoc
要考虑每行多个匹配项,请使用选项-o
grep -o 'test' testdoc|wc -l
要获得两行和计数,您可以使用tee
输出到临时文件f
并将f
的结果追加到grep
:
grep "test" testdoc |tee >(wc -l 1>&f)|grep -o "test"|wc -l 1>>f && cat f
# or to get both outputs in a line:
grep "test" testdoc |tee >(wc -l|tr '\n' ' ' 1>&f)|grep -o "test"|wc -l 1>>f && cat f
这是另一种不使用grep
的解决方案(因为在某些发行版中缺少-o
选项)
awk 'BEGIN{lCount=0;count=0}{c=gsub(/test/,"");count+=c;if(c)lCount+=1;}END{print(lCount,count)}' testdoc