2009-07-15 118 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輸出後立即獲取百分比數字。