BASH - grep结果的换行符

时间:2016-08-09 21:34:56

标签: linux bash shell grep tr

我在grep -o '100%'之后有wget个管道,所以我只通知wget已完成下载,屏幕上没有无用的信息。但每个100%都打印在一个新行上,我不喜欢这个洪水!那么,在tr之后通过管道tr,是否可以grep将换行符放入空格?我每次尝试都没有结果......

2 个答案:

答案 0 :(得分:3)

你最终会得到输出,但一次又一次。这是由于缓冲。

GNU grep有一个--line-buffered来避免输出缓冲。 tr输入缓冲没有明显的方法可以将其关闭,因此您可以改为使用awk

wget -r -l 1 http://stackoverflow.com/ 2>&1 |
    grep --line-buffered -o '100%' | awk '{printf("%s ", $0);}'
100% 100% 100% 100% 100% 100% 100% 100% 100% 100% 100% 

答案 1 :(得分:0)

它的缓冲,请参阅Why no output is shown when using grep twice?。只需使用awk:

$ wget -r -l 1 https://stackoverflow.com/ 2>&1 | awk 'match($0,/100%/){printf "%s ", substr($0,RSTART,RLENGTH)}'
100% 100% 100% 100% 100% 100% 100% 100% 100% 100% 100% 100% 100% 100%

或者可能更有用:

$ wget -r -l 1 https://stackoverflow.com/ 2>&1 | awk '/100%/{printf "."}'
...........