这是我迄今为止:
[my1@graf home]$ curl -# -o f1.flv 'http://osr.com/f1.flv' | grep -o '*[0-9]*' ####################################################################### 100.0%
我希望使用grep,只从CURL输出的进度条中提取百分比。
我认为我的正则expression式是不正确的,我也不确定这个grep是否会影响正在不断更新的百分比。
我想要做的是基本上只得到CURL给我的百分比数字作为输出,没有别的。
感谢您的任何帮助。
你不能通过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]+'