这是我到目前为止所做的:
[my1@graf home]$ curl -# -o f1.flv 'http://osr.com/f1.flv' | grep -o '*[0-9]*'
####################################################################### 100.0%
我希望使用grep并仅从CURL输出的进度条中提取百分比。
我认为我的正则表达式不正确,我也不确定这个grep是否会影响持续更新的百分比?
我想要做的是基本上只获得CURL给我作为输出的百分比数字而不是别的。
感谢您的帮助。
答案 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]+'