You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从download.log提取所有zip文件名及大小并保存到新文件?

解决从download.log提取zip文件名和大小的问题

首先,你当前使用的grep命令之所以返回整个文件,是因为你的正则表达式写得有问题:
......*|.zip 这个表达式里,......* 其实等价于匹配任意长度≥6的字符串(6个.匹配任意6个字符,*让前面的.重复任意次数),再加上|.zip(匹配任意单个字符+zip),几乎所有行都会被匹配到,自然就返回了整个日志文件。

下面给你几个实用的解决思路,你可以根据download.log的实际格式调整:

方法1:先过滤含.zip的行,再用awk提取关键内容

grep的核心是过滤行,而awk擅长提取行内的字段。假设你的日志行格式类似这样:

2024-05-20 10:05:00 /home/user/downloads/report.zip 789KB
2024-05-20 10:10:00 /tmp/backup_2024.zip 1.2MB

你可以先过滤出包含.zip的行,再用awk提取文件名和大小字段:

grep '\.zip' download.log | awk '{print $4, $5}' > zip_sizes.txt

这里的$4和$5是字段位置,你需要根据自己日志里的字段顺序调整——比如如果文件名是第3个字段,大小是第6个,就改成print $3, $6。

方法2:用grep的-o选项+精确正则直接提取目标内容

如果你的日志里,zip文件名和大小是成对出现的(比如文件名后面跟着括号括起来的大小),可以用grep -o只输出匹配的部分,结合分组正则来精准提取:
假设日志行是:

Download completed: data_archive.zip (456KB)
Saved file: docs_backup.zip (2.1MB)

可以用这个命令:

grep -E -o '([a-zA-Z0-9_\/-]+\.zip).*\(([0-9.]+\w+)\)' download.log | sed 's/\(.*\.zip\) (\(.*\))/\1 \2/' > zip_sizes.txt
  • [a-zA-Z0-9_\/-]+\.zip 匹配包含路径、下划线、连字符的zip文件名(你可以根据实际文件名规则调整字符范围)
  • \(([0-9.]+\w+)\) 匹配括号里的大小内容
  • 最后用sed把匹配结果整理成文件名 大小的格式

关键提示

如果上面的命令不适用,你可以先运行head download.log查看几行日志的具体格式,然后针对性调整正则或字段位置——核心是先明确:

  • zip文件名在日志行里的特征(比如以.zip结尾,前面是路径或纯文件名)
  • 大小信息的特征(比如数字+KB/MB,或者括号包裹,或者带有size:前缀)

内容的提问来源于stack exchange,提问作者Valen Tin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:59:45