将2个grep命令用于wc

时间:2016-09-05 10:10:33

标签: linux shell command-line grep word-count

我有一个名为 a.txt 的文件,长度为100行。

grep    rake a.txt | wc    #returns 10 lines

grep -v rake a.txt | wc    #returns 90 lines

grep    Rake a.txt | wc    #returns  3 lines

这100行中的一行都有,但我想要只用 'Rake'的行。我试过grep Rake a.txt | grep -v rake a.txt | wc返回90行?

我想找到所有3行'Rake',将其输入grep,找出这三行中是否包含'Rake'而不是'rake',然后使用wc来计算那些行。我可以使用重定向来创建另一个文件然后grep -v那个新文件,但这不是我的目标。我确信这很简单,但我该如何解决问题?

2 个答案:

答案 0 :(得分:2)

不要给第二个grep提供文件参数,即:

grep Rake a.txt | grep -v rake | wc -l

使用file参数,grep将再次搜索文件。没有它,它只会过滤其输入。

答案 1 :(得分:2)

  

我试过grep Rake a.txt | grep -v rake a.txt | wc返回90行?

管道的关键是命令的输出提供下一个命令。相反,你正在管道然后说grep -v rake a.txt,这使得前一个命令变得多余。

所以你只需要正常管道:

grep Rake a.txt | grep -v rake   | wc
#                              ^
#                             removed a.txt

您还可以使用awk并告诉它计算包含 Rake 的行,而不是 rake 。最后,打印计数器:

awk '/Rake/ && !/rake/ {count++} END {print count+0}' a.txt