我知道如何管道标准输出:
./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
是我正在寻找的解决方案。
还有其他方法可以达到这个目的吗?
答案 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')