CURL进度条:如何使用greppipe道和提取数字?

这是我迄今为止:

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

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

我认为我的正则expression式是不正确的,我也不确定这个grep是否会影响正在不断更新的百分比。

我想要做的是基本上只得到CURL给我的百分比数字作为输出,没有别的。

感谢您的任何帮助。

Solutions Collecting From Web of "CURL进度条:如何使用greppipe道和提取数字?"

你不能通过grep得到这样的进度信息; 这没有意义。

curl将进度条写入stderr,所以你必须重定向到stdout,然后才能grep:

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

 ^ M 0.0
 %^ M ############################################### ######################### 100。
 0%^ M ############################################## ########################## 100
 0.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%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

尝试这个:

 curl source -o dest -# 2> tmp& grep -o ".....%" tmp | tail -n1 

使用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输出后立即获取百分比数字。

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

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

这将抓住所有的文字,所以也许尝试:

 grep -p '[0-9]+'