counter=$( grep -n 'ABC' $1 | sed 's/:[a-zA-Z0-9 ]*;//' > $2 | wc -l );
echo $counter; #Output is 0?
计数器的值应该是wc -l
的输出吗?为什么我发现它为零?我使用 zsh 。如果我直接执行命令我没面临任何问题。它是否与wc
有关,它打印的东西却返回了别的东西?我该如何正确地做到这一点。
我在做什么?
我正在使用grep打印行号并使用sed我正在删除行的内容并使用wc我正在计算输出的行数。
编辑:
别有用心:
我别有用心的是分割文件。要做到这一点,我正在识别一些行号。所以,使用grep我正在查找某些文本(如图所示,你可以看到SET SCHEMA
)。我不希望行的内容只是行号,所以我通过识别开始和结束来删除行。使用wc -l我正在计算行数。
答案 0 :(得分:2)
您无法直接将输出重定向到管道以及同时重定向到文件。为此,您可以使用tee
命令:
... | sed 's/:[a-zA-Z0-9 ]*;//' | tee "$2" | ...
答案 1 :(得分:1)
尝试:
counter=$( grep -n 'ABC' $1 | sed 's/:[a-zA-Z0-9 ]*;//' | wc -l );
echo $counter; #Output is 0?
使用sed命令想要达到什么目的?
你也可以使用它:
counter=$( grep -n 'ABC' $1 | wc -l );
此命令:
grep -n 'ABC' $1
获得以下输出:
1:ABC 3:ABC
现在你要计算'ABC'的出现次数。在这种情况下2,对吧?
一个简单的grep用wc做这个工作还是我错了?
grep -n 'ABC' $1 | wc -l
wc联机帮助页:
-l, - lines 打印换行计数