linux - 将 2 个 grep 命令通过管道传送到 wc

标签 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 行?

我想找到所有带有 '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/

相关文章:

java - 是否有一个通用的模板可以将一个applet 变成一个shell 程序?

linux - 如何将存档中的所有文件解压缩到一个文件夹中,而不管它们的文件夹嵌套?

linux bash终端功能不关闭命令

从 shell 启动的仪器的 iPhone(硬件?)id

windows - 如何在 Windows 上添加自定义 url 处理程序。喜欢 iTunes itms ://

linux - 有没有办法告诉 sed 忽略符号链接(symbolic link)?

python - 安装用 C++ : g++ unrecognized command line option --output-lib 编写的 Python 包 (leven) 时出错

linux - x86-64 AMD 上 CALL 指令的操作数生成

linux - 如何打印 makefile 的前几行(-Wall -g 标志)?

bash - 用一行删除所有损坏的符号链接(symbolic link)?