管道 2 grep 命令到 wc
Piping 2 grep commands into 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 行中有一个同时包含两者,但我想要 只有 'Rake' 的行。我试过grep Rake a.txt | grep -v rake a.txt | wc
returns90行?
我想找到带有 'Rake' 的所有 3 行,将其通过管道传输到 grep
,查找这 3 行中是否包含 'Rake' 但不包含 'rake',以及然后使用 wc
来计算行数。我可以使用重定向来制作另一个文件,然后 grep -v
那个新文件,但这并不是我真正的目标。我确定这很简单,但我该如何修复我的命令?
不要为第二个 grep
提供文件参数,即:
grep Rake a.txt | grep -v rake | wc -l
使用文件参数,grep
将再次搜索文件。没有它,它只会过滤它的输入。
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
我有一个名为 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
returns90行?
我想找到带有 'Rake' 的所有 3 行,将其通过管道传输到 grep
,查找这 3 行中是否包含 'Rake' 但不包含 'rake',以及然后使用 wc
来计算行数。我可以使用重定向来制作另一个文件,然后 grep -v
那个新文件,但这并不是我真正的目标。我确定这很简单,但我该如何修复我的命令?
不要为第二个 grep
提供文件参数,即:
grep Rake a.txt | grep -v rake | wc -l
使用文件参数,grep
将再次搜索文件。没有它,它只会过滤它的输入。
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