管道标准输出时回声

时间:2016-03-21 08:41:30

标签: bash pipe echo

我知道如何管道标准输出:

./myScript | grep 'important'

上述命令的输出示例:

Very important output.
Only important stuff here.

但是grep虽然我也希望echo每行都有一些内容,所以看起来像这样:

1) Very important output.
2) Only important stuff here.

我该怎么做?

编辑:显然,我还没有足够好地指明我想要做的事情。行的编号只是一个例子,我想知道如何将文本(任何文本,包括变量和诸如此类)添加到管道输出。我看到有人可以使用awk '{print $0}'实现这一目标,其中$0是我正在寻找的解决方案。

还有其他方法可以达到这个目的吗?

3 个答案:

答案 0 :(得分:2)

这将从0开始命中

./myScript | grep 'important' | awk '{printf("%d) %s\n", NR, $0)}'

1) Very important output.
2) Only important stuff here.

这将为您提供匹配的行号

./myScript | grep -n 'important'

3:Very important output.
47:Only important stuff here.

答案 1 :(得分:2)

如果您希望新输出的行号从1..n运行,其中n是新输出中的行数:

./myScript | awk '/important/{printf("%d) %s\n", ++i, $0)}'
#                  ^ Grep part                     ^ Number starting at 1

答案 2 :(得分:2)

带有while循环的解决方案不适用于大型文件,所以只有当你没有很多important内容时才应该使用这个解决方案:

i=0
while read -r line; do
   ((i++))
   printf "(%s) Look out: %s" $i "${line}"
done < <(./myScript | grep 'important')