如何过滤curl stderr输出但保持进度表输出?

时间:2013-12-05 15:28:57

标签: bash shell curl sed

我想用自定义消息过滤和替换curl错误的文本,这个脚本管道到sed工作:

URL=""
curl --create-dirs -o /home/user/test.dat $URL |& sed 's/curl/Custom message/g'

这是我得到的输出:

Custom message: no URL specified!
Custom message: try 'Custom message --help' or 'Custom message --manual' for more information

然而,当没有错误并且curl正在下载文件时,我不再得到进度表,而是我要显示它。

当前输出:

这是我在没有错误的情况下使用pipe和sed获得的输出,请注意进度表缺失

URL="http_address"
curl --create-dirs -o /home/user/test.dat $URL |& sed 's/curl/Custom error/g'

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

所需的输出

这是通过在没有错误时注释掉pipe和sed获得的输出,注意显示进度表:

URL="http_address"
curl --create-dirs -o /home/user/test.dat $URL #|& sed 's/curl/Custom error/g'

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 12980    0 12980    0     0   711k      0 --:--:-- --:--:-- --:--:--     0

如何过滤卷曲错误消息,但仍然可以使用进度表获得所需的输出?

我搜索了这个论坛并尝试了几种解决方案,但似乎没有任何效果。一旦你打开或grep curl stderr,就不再显示进度表了。 此外,一般来说,论坛中提出的问题是关于如何仅显示错误消息而不是显示进度表,而是我希望实现相反的目的。

1 个答案:

答案 0 :(得分:0)

尝试使用sed -u(或--unbuffered)。它不会等到输入结束才能处理内容。

如果不起作用,请将输出保存到| tee的临时文件,并在流程结束后处理错误。