bash - 如何使用 grep 从最后一行提取百分比?

标签 bash wget

我正在尝试使用 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?

最佳答案

  1. 您的模式包含不匹配的(
  2. 您需要告诉 grep 您正在使用 PCRE。
  3. 由于您将 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+)?(?=%))"

关于bash - 如何使用 grep 从最后一行提取百分比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18482841/

相关文章:

bash - 如何将两个文件合并为一个文件,每个文件的数据都有列?

linux - 检查脚本中的差异退出状态

bash - wget转义特殊字符

java - 从 Java 运行的 OSX 脚本中找不到 wget

linux - 为什么这个文件没有下载到指定位置?

bash - 从文件 B 的列表中删除文件 A 中的所有单词

linux - bash:用于踢除 localhost 之外的所有 ssh 条目的脚本

bash - 将文本附加到每个文件的 Shell 脚本?

linux - 无法在 Ubuntu 14.04 LTS 上通过 wget 建立 SSL 连接

ssl - 在 Firefox 中,curl 不验证带有 --cacert 传递的导出站点证书的证书