我正在尝试使用wget
下载文件,并希望将进度存储在日志文件中。
wget http://unfccc.int/resource/docs/convkp/kpeng.pdf -O amit.pdf 2> amit.log
这是wget的回报:
Connecting to unfccc.int (unfccc.int)|62.225.2.55|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 76721 (75K) [application/pdf]
Saving to: `amit.pdf'
0K .......... .......... .......... .......... .......... 66% 2.29M 0s
50K .......... .......... .... 100% 9.41M=0.02s
2013-08-28 12:24:32 (3.06 MB/s) - `amit.pdf' saved [76721/76721]
我想使用grep从最后一行获取百分比值。这就是我使用的上述命令,它不起作用:
| grep "(\d+(\.\d+)?(?=%)" amit.log
是否可以只使用grep而不使用sed和awk?
答案 0 :(得分:3)
(
。grep
您正在使用PCRE。STDERR
重定向到文件,因此使用管道grep
会没有多大意义。而是将STDERR
重定向到STDOUT
,然后管道输出。尝试:
grep -oP "(\d+(\.\d+)?(?=%))"
如果您想使用烟斗,请说:
wget http://unfccc.int/resource/docs/convkp/kpeng.pdf -O amit.pdf 2>&1 | grep -oP "(\d+(\.\d+)?(?=%))"
编辑:如果需要将stderr
记录到文件中,请说:
wget http://unfccc.int/resource/docs/convkp/kpeng.pdf -O amit.pdf 2>&1 | tee amit.log | grep -oP "(\d+(\.\d+)?(?=%))"
答案 1 :(得分:1)
我认为您希望从命令输出中提取最后一个百分比,以便能够发现最终的失败。
如@devnull所述,wget
详细输出是在标准错误上写的,因此我们必须将其重定向到标准输出才能将其传递给grep。
只能使用grep
选项保留-o
匹配模式。这将打印所有百分比而没有不需要的内容。
然后,您可以使用tail
隔离最后一行。
最后,将其记录到文件中。
wget http://unfccc.int/resource/docs/convkp/kpeng.pdf -O amit.pdf 2>&1 | grep -o '[0-9]\+%' | tail -1 > amit.log