将2个grep命令放入wc中

我有一个名为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条线中的一条都有,但我只需要 “耙”的线。 我已经尝试grep Rake a.txt | grep -v rake a.txt | wc grep Rake a.txt | grep -v rake a.txt | wc grep Rake a.txt | grep -v rake a.txt | wc返回90行?

我想用'Rake'find所有的3行,把它pipe理成grep ,find这3行中是否包含'Rake'而不是'rake',然后用wc来计算行数。 我可以使用redirect来创build另一个文件,然后grep -v这个新文件,但这不是我的目标。 我确定这很简单,但是如何解决我的命令呢?

我已经尝试grep Rake a.txt | grep -v rake a.txt | wc grep Rake a.txt | grep -v rake a.txt | wc 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 

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

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

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