grep cURL 出力

grep cURL 出力

私が走るとき

curl https://example.com -o example.html 2>&1 | grep -P "\d.*\d"

次の出力が表示されます(赤色)。

100  1270  100  1270    0     0    318      0  0:00:04  0:00:04 0:00:00   318


私が望むのは、cURLプログレスバーの最後の行を表示することです。更新するとき(実際には特定の列だけを表示したいのですが、行全体を表示してもかまいません。)


希望の出力(時間t = 1秒):

user@comp:~/Desktop/$ curl https://example.com -o example.html 2>&1 | grep -P "\d.*\d"
25  1270  25  318    0     0    318      0  0:00:01  0:00:01 0:00:03   318

希望の出力(時間t = 2秒):

user@comp:~/Desktop/$ curl https://example.com -o example.html 2>&1 | grep -P "\d.*\d"
50  1270  50  636    0     0    318      0  0:00:02  0:00:02 0:00:02   318

希望の出力(時間t = 3秒):

user@comp:~/Desktop/$ curl https://example.com -o example.html 2>&1 | grep -P "\d.*\d"
75  1270  75  954    0     0    318      0  0:00:03  0:00:03 0:00:01   318

希望の出力(時間t = 4秒):

user@comp:~/Desktop/$ curl https://example.com -o example.html 2>&1 | grep -P "\d.*\d"
100  1270  100 1270    0     0    317      0  0:00:04  0:00:04 0:00:00   0

cURLとgrepでウォッチを試してみましたが、まだ動作しません(出力なし)。

watch --no-title --interval 1 "curl http://example.com -o test2.html" | grep -P '\d.*\d'

ベストアンサー1

パイプバッファリングのため、カールの| grep進行状況を直接出力できません。この問題に関するいくつかの重要な洞察は、以前の質問で提供されています。パイプラインでバッファリングをオフにする

解決策はstdbuf次のとおりですtr

curl https://example.com -o example.html 2>&1 | stdbuf -oL tr -s '\r' '\n' | while read i; do echo -en "\r$i  "; done

そして:

  • stdbuf -oL:stdout は、ループが正しく処理されるようにラインバッファtrリングされます。while
  • tr -s '\r' '\n'curl:出力からキャリッジリターンを改行文字に置き換えます。
  • while read i; do echo -en "\r$i "; donebash進行線のための簡単なソリューション

おすすめ記事