CURL Progress Bar:如何仅使用grep管道和提取数字?

时间:2009-07-15 16:24:15

标签: linux shell command-line curl grep

这是我到目前为止所做的:

[my1@graf home]$ curl -# -o f1.flv 'http://osr.com/f1.flv' |  grep -o '*[0-9]*'
####################################################################### 100.0%

我希望使用grep并仅从CURL输出的进度条中提取百分比。

我认为我的正则表达式不正确,我也不确定这个grep是否会影响持续更新的百分比?

我想要做的是基本上只获得CURL给我作为输出的百分比数字而不是别的。

感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

你无法通过grep获得这样的进度信息;它没有意义。

curl将进度条写入stderr,因此您必须先重定向到stdout才能进行grep:

$ curl -# -o f1.flv 'http://osr.com/f1.flv' 2>&1 | grep 1 | less导致:

^M                                                                           0.0
%^M######################################################################## 100.
0%^M######################################################################## 100
.0%^M######################################################################## 10
0.0%

您是否期望在其他地方重定向的连续数字流?或者您希望在一个点上获取数字?

如果它是前者,那么这种半起作用就是在一个小文件上:

$ curl -# -o f1.flv 'http://osr.com/f1.flv' 2>&1 | sed  's/#//g' -
 100.0%                                                                    0.0%

但它在大文件上没用。在下载完成之前,输出不会打印,可能是因为curl似乎正在向终端发送^ H. sed它可能有更好的方法,但我不会屏住呼吸。

$ curl -# -o l.tbz 'ftp://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/2009/06/2009-06-02-05-mozilla-1.9.1/firefox-3.5pre.en-US.linux-x86_64.tar.bz2' 2>&1 | sed 's/#//g' -
 100.0%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

答案 1 :(得分:3)

试试这个:

curl source -o dest -# 2> tmp&

grep -o ".....%" tmp | tail -n1

答案 2 :(得分:3)

使用curl 7.36.0(也适用于其他版本),您可以通过以下方式提取百分比:

curl ... 2>&1 -# | stdbuf -oL tr '\r' '\n' | grep -o '[0-9]*\.[0-9]'

此处...代表选项/文件名。这会输出一系列百分比数字。

Curl在其输出中使用回车\r,因此您需要tr将它们首先转换为\n,因为grep是面向行的。您还需要使用stdbuf修改输出缓冲区设置,以便在curl输出后立即获取百分比数字。

答案 3 :(得分:0)

你需要在正则表达式中使用。* not *。

grep -o '.*[0-9].*'

这会捕捉所有文字,所以也许试试:

grep -p '[0-9]+'