在bash管道中评估命令但返回值是错误的

时间:2017-05-15 11:35:46

标签: sed grep zsh piping wc

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我正在计算输出的行数。

编辑:

直接在shell上 fdgs

别有用心:

我别有用心的是分割文件。要做到这一点,我正在识别一些行号。所以,使用grep我正在查找某些文本(如图所示,你可以看到SET SCHEMA)。我不希望行的内容只是行号,所以我通过识别开始和结束来删除行。使用wc -l我正在计算行数。

2 个答案:

答案 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 打印换行计数