评估 bash 管道中的命令但 return 值错误

Evaluating a command in bash pipe but return value is wrong

counter=$( grep -n 'ABC'  | sed 's/:[a-zA-Z0-9 ]*;//' >  | wc -l );

echo $counter; #Output is 0?

计数器的值应该是wc -l的输出吧?为什么我发现它是零?我使用 zsh。如果我直接执行命令,我不会遇到任何问题。是否与 wc 有关,它打印一些东西但 return 其他东西?我该如何正确执行此操作。


我在做什么?

我正在使用 grep 和 sed 打印行号我正在删除行的内容并使用 wc 我正在计算输出的行数。


编辑:

直接在 shell


别有用心:

我别有用心的是要拆分一个文件。为此,我确定了一些行号。因此,使用 grep 我正在寻找特定文本(如您所见,它是 SET SCHEMA,在图片中)。我不想让行的内容只是行号,所以我通过识别开始和结束来剪掉这些行。使用 wc -l 我正在计算行数。

尝试:

counter=$( grep -n 'ABC'  | sed 's/:[a-zA-Z0-9 ]*;//' | wc -l );

echo $counter; #Output is 0?

你想用 sed 命令达到什么目的?

你也可以使用这个:

counter=$( grep -n 'ABC'  | wc -l );

这个命令:

grep -n 'ABC' 

获得以下输出:

1:ABC 3:ABC

现在您要计算 'ABC' 的出现次数。在这种情况下2,对吗?

一个简单的 wc grep 就可以完成工作,还是我错了?

grep -n 'ABC'  | wc -l

wc 联机帮助页:

-l, --行 打印换行数

您不能同时将输出直接重定向到管道和文件。为此,您可以使用 tee 命令:

... | sed 's/:[a-zA-Z0-9 ]*;//' | tee "" | ...