Sed 在bash管道中计算命令,但返回值错误
计数器的值应该是Sed 在bash管道中计算命令,但返回值错误,sed,grep,zsh,piping,wc,Sed,Grep,Zsh,Piping,Wc,计数器的值应该是wc-l的输出,对吗?为什么我发现它是零?我使用zsh。如果我直接执行命令,我不会遇到任何问题。它打印某些内容,但返回其他内容是否与wc有关?如何正确地执行此操作 我在做什么 我使用grep打印行号,使用sed删除行内容,使用wc计算输出的行数 编辑: 直接在外壳上 别有用心: 我的不可告人的动机是分裂一个文件。为此,我确定了一些行号。因此,我使用grep查找某些文本(如图中的SET SCHEMA)。我不希望行的内容只是行号,所以我通过标识开始和结束来剪切行。使用wc-l
wc-l
的输出,对吗?为什么我发现它是零?我使用zsh。如果我直接执行命令,我不会遇到任何问题。它打印某些内容,但返回其他内容是否与wc
有关?如何正确地执行此操作
我在做什么 我使用grep打印行号,使用sed删除行内容,使用wc计算输出的行数
编辑: 直接在外壳上
别有用心: 我的不可告人的动机是分裂一个文件。为此,我确定了一些行号。因此,我使用grep查找某些文本(如图中的
SET SCHEMA
)。我不希望行的内容只是行号,所以我通过标识开始和结束来剪切行。使用wc-l我正在数行。试试:
counter=$( grep -n 'ABC' $1 | sed 's/:[a-zA-Z0-9 ]*;//' > $2 | wc -l );
echo $counter; #Output is 0?
您希望使用sed命令实现什么
您还可以使用以下选项:
counter=$( grep -n 'ABC' $1 | sed 's/:[a-zA-Z0-9 ]*;//' | wc -l );
echo $counter; #Output is 0?
此命令:
counter=$( grep -n 'ABC' $1 | wc -l );
获取以下输出:
grep -n 'ABC' $1
现在要计算“ABC”的出现次数。在这种情况下是2,对吗
一个简单的grep和wc一起完成任务,还是我错了
1:ABC 3:ABC
主页:
-l、 --台词
打印换行符计数不能同时将输出重定向到管道和文件。为此,可以使用
tee
命令:
grep -n 'ABC' $1 | wc -l
如你所见,我使用sed命令将行号打印到一个文件中。你能告诉我你的结果应该是什么吗?我会尽力帮助您。您正在将
sed
的输出重定向到一个文件,因此wc
将始终计数为0行。为什么在Bash中直接运行此命令时我会得到答案?您是什么意思?我告诉您删除重定向:counter=$(grep-n'ABC'$1 | sed's/:[a-zA-Z0-9]*;/'| wc-l)
(删除sed
命令的$2
)。它起作用了。但是,请检查edit我不明白为什么重定向直接在终端上工作?如果你只是重定向命令(没有tee),你应该看不到任何输出在终端中没有重定向screenshot@TarunMaganti:啊,我错过了,我没有可用的zsh
测试,所以我不知道,但是tee
应该可以在所有shell上工作zsh
有一个选项(MULTIOS
),允许在一个命令上进行多个重定向;这就像运行隐式tee
。
... | sed 's/:[a-zA-Z0-9 ]*;//' | tee "$2" | ...