2009-07-15 115 views
2

这是我到目前为止有:CURL进度条:如何使用grep管道和提取数字?

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

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

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

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

谢谢你的帮助。

回答

2

你不能像通过grep的进度信息;它没有任何意义。

curl写入进度条到stderr,所以你要重定向到标准输出,然后才能用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% 

你期待的数字不断流,你是否在其他地方重新定向?或者你希望在一个点上获取数字?

如果是前者,这类的小档案半assedly作品:

$ 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%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
+0

啊我看到了,重定向输出,所以我可以真正看到它。我希望只是提取数字,因为他们看起来像你说的(前者)。我尝试了上面的内容,但是只有在达到100%时才会得到输出 - 也许我需要更大的文件才能看到进度变化? – Abs 2009-07-15 17:07:06

+0

Curl的输出是为了让人们阅读,而不是通过计算机 - 这就是为什么当grep输入时格式很糟糕。使用`wget --progress = dot`并计算点数可能会更好,但这也不是百分比。或者,也许你可以只计算卷标输出中的#。至少你会得到5-10%的准确度,或者是否有很多#适合终端,对吧? – 2009-07-15 17:12:46

0

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

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

,将捕获的所有文字了,所以也许尝试:

grep -p '[0-9]+' 
+0

我是否需要进一步将其转换为回显以实际查看grep的结果? – Abs 2009-07-15 16:37:44

3

试试这个:

curl source -o dest -# 2> tmp& 

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

,卷曲7.36.0(也应该对其他版本的工作),你可以提取下列方式百分比:

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

这里...看台选项/文件名。这会输出一系列百分比数字。

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