2016-08-09 29 views
1

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

回答

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% 
+0

“你会得到最终的输出,但都一气呵成。”诚然,我现在确认。我没有等很长时间,因为有很多文件需要下载,而且看到一个没有关于正在发生的事情的信息的屏幕是非常烦人的! – Anders

+0

你确定' - 行缓冲'_disables_缓冲吗? 'man'和'info'都有其他的含义:“在输出中使用行缓冲”。顺便说一句,使用它或不使用结果相同:所有'100%'只在最后。 – Anders

+0

您是在尝试按照此处提供的命令,还是仅在现有命令中添加了“--line-buffered”? –

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 "."}' 
........... 
+0

我复制并执行了他们写的命令。都下载了18个项目,没有输出,需要取消(CTRL + C)才能停止执行。我认为,通过重复1个以上答复者的1个以上解决方案,需要检查其他事情。您的解决方案在哪个版本的'wget'上工作? – Anders

+0

建立在cygwin上的GNU Wget 1.16.3。 –

+0

我在1.17.1上,所以我更新到1.18并再次尝试。同样的无结果...所以它不是'wget'的罪魁祸首。也许'awk'?这里是由男人和信息cala mawk。 – Anders