卷曲进度条:如何管和提取号码只用grep?(CURL Progress Bar: How to pi

2019-07-30 06:28发布

这是我到目前为止有:

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

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

我觉得我的正则表达式是不正确的,我也不知道这grep的将采取的百分比在不断更新的影响?

我所试图做的是基本上得到卷曲只给我的百分比数,作为输出,没有别的。

感谢您的任何帮助。

Answer 1:

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

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

您是否希望您重定向其他地方的数字不断流? 或者你希望在一个点抢号?

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

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

但它是在一个大的文件也没用。 输出不打印,直至下载完成后,可能是因为卷曲似乎发送^ 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%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


Answer 2:

试试这个:

curl source -o dest -# 2> tmp&

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


Answer 3:

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

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

这里...代表选项/文件名。 这种输出百分比数字的序列。

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



Answer 4:

您需要使用*不是在你的正则表达式*。

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

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

grep -p '[0-9]+'


文章来源: CURL Progress Bar: How to pipe and extract numbers only using grep?