我有一个名为 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 行?
我想找到所有带有 'Rake' 的 3 行,将其通过管道输入 grep
,查找这 3 行中是否有任何一行包含“Rake”但不包含“rake”,然后使用 wc
来计算这样做的行数。我可以使用重定向来创建另一个文件,然后 grep -v
那个新文件,但这并不是我真正的目标。我确信这很简单,但是我该如何修复我的命令?
最佳答案
I have tried
grep Rake a.txt | grep -v rake a.txt | wc
returns 90 lines?
管道的要点是命令的输出提供给下一个命令。相反,您使用管道,然后说 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
关于linux - 将 2 个 grep 命令通过管道传送到 wc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39328320/