Linux BASH-tr grep结果的换行符
我有一个Linux BASH-tr grep结果的换行符,linux,bash,shell,grep,tr,Linux,Bash,Shell,Grep,Tr,我有一个grep-o'100%在wget之后,所以我只收到wget完成下载的通知,屏幕上没有无用的信息。但是每个100%都打印在新的行上,我不喜欢这种洪水!那么,有没有一种方法可以通过在grep之后管道tr将换行符插入空格?我所得到的只是没有结果,每次我尝试…你最终都会得到输出,但都是一次性的。这是由于缓冲 GNUgrep有一个--行缓冲,以避免输出缓冲tr没有明显的方式关闭输入缓冲,因此您可以使用awk: wget -r -l 1 http://stackoverflow.com/ 2>
grep-o'100%
在wget
之后,所以我只收到wget
完成下载的通知,屏幕上没有无用的信息。但是每个100%
都打印在新的行上,我不喜欢这种洪水!那么,有没有一种方法可以通过在grep
之后管道tr
将换行符插入空格?我所得到的只是没有结果,每次我尝试…你最终都会得到输出,但都是一次性的。这是由于缓冲
GNUgrep
有一个--行缓冲
,以避免输出缓冲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%
这是缓冲,看。只需使用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 "."}'
...........
“你最终会得到输出,但都是一次性的。”是的,我现在证实了。我没有等太久,因为有很多文件要下载,看着一个没有任何信息的屏幕是非常烦人的!您确定
--line buffered
禁用缓冲吗?man
和info
都表示“在输出上使用行缓冲”。顺便说一句,使用或不使用它都会得到相同的结果:所有100%
仅在末尾。您是按照此处提供的命令尝试该命令,还是只是在现有命令中添加了--line buffered
。所以我维护了我的wget
(不是递归的,是从文件输入的),并添加了您建议的内容。不管怎样,现在我完全按照你的建议进行了测试,除了wget
和grep
之间没有断线,而且100%
没有断线,直到我中止了这个过程,因为我花了太长时间没有任何输出,并且注意到下载在文件夹上的18个项目停止。这很奇怪,我无法复制它。如果您使用stdbuf-oL wget代码>?我复制并执行了您编写的命令。两人都下载了18个项目,没有输出,需要取消(CTRL+C)以停止执行。我认为,随着这一过程对多个应答器的多个解决方案的重复,其他事情需要检查。您的解决方案是在哪个版本的wget
上运行的?GNU wget 1.16.3构建于cygwin之上。我是在1.17.1上运行的,所以我更新到1.18并重试。同样的非结果。。。所以这不是罪魁祸首。也许是awk?在这里,它是由人和信息caledmawk。唯一的建议我留下的是安装gawk,对不起。