2009-07-15 4 views
2

これは私がこれまで持っているものです。CURL Progress Bar:grepを使ってのみ数値をパイプし抽出する方法は?

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

私はグレップを使用し、出力のみをカールというプログレスバーからのパーセンテージを抽出したいです。

私の正規表現が正しくないと思うし、このgrepがパーセンテージを継続的に更新するかどうかもわかりません。

私がしようとしているのは、基本的にCURLだけで、出力としてのパーセンテージナンバーを与えるだけです。

ありがとうございました。

答えて

2

あなたはgrepを通過ような進捗情報を取得することはできません。それは意味をなさない。あなたは、あなたがそれをgrepすることができます前に、stdoutにリダイレクトする必要がありますので

curlは、標準エラー出力にプログレスバーを書き込み:中

$ 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

+0

Curlの出力は、コンピュータではなく、人間が読むことを目的としています。その理由は、grepが取り込んだときにフォーマットが嫌な理由です。 'wget --progress = dot'を使ってドットを数えればよいかもしれませんが、それでもパーセンテージではありません。あるいは、カールの出力で#を数えることができます。少なくとも、あなたは5〜10%の精度を得るでしょうが、ターミナルには多くの適合があります。 –

+0

あなたは正しいです、おそらくハッシュを数えて幸運。これは私のホストによって何らかの理由でブロックされているので、私はwgetを使うことができません。私が以前に尋ねた質問では、wgetを使用できない場合、CURLが次善策であるというコンセンサスがありました。他のオプションのどれにも進捗状況を簡単に解析できる方法を追加する必要があります! – Abs

0

正規表現では*。*を使用する必要があります。ので、多分してみてください、しかし、すべてのテキストをキャッチします

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

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

実際にgrepの結果を見るには、これをechoにさらにパイプする必要がありますか? – Abs

3

この試してみてください:あなたは次のように割合を抽出することができます(また、他のバージョンのために働く必要があります)カール7.36.0で

curl source -o dest -# 2> tmp& 

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

を:

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

ここ...スタンドオプション/ファイル名用。これはパーセンテージ番号のシーケンスを出力します。

カールは、その出力に\rを返すので、grep指向ラインであるので、あなたが最初\nにそれらを変換するtrを必要と台車を使用しています。また、出力バッファ設定をstdbufに変更して、カールを出力した直後のパーセント値を取得する必要があります。

+0

私の場合、 'grep'の前に' stdbuf -oL'が必要でした。すてきな答え、ありがとう! – user1112789

関連する問題