我有一个名为 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
那个新文件,但这不是我的目标。我确信这很简单,但我该如何解决问题?
答案 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