命令grep \.png$ organized.txt | awk {print $NF} | sed s/.*organized\/// png_paths.txt第一步grep \.png$ organized.txt筛选过滤 原理拆解grep是 Linux 下的文本搜索神器。\.png$是正则表达式\.在正则里.代表“任意字符”为了精准匹配真实的“点”必须用反斜杠\进行转义。png字面匹配。$这是行尾锚点。它确保.png必须出现在这一行的最后。如果不加$像abc.png.txt这样的行也会被误伤选中。此时流水线上的数据只剩下包含 PNG 图片信息的那些行排除了文件夹和其他 txt 文件。第二步| awk {print $NF}按列提取 原理拆解|是管道符把 grep 的输出直接作为 awk 的输入。awk是一个极其强大的按列处理文本的工具。它默认把空格或 Tab 当作“分隔符”把一行文本切成很多个“字段列”。{print $NF}是核心在 awk 中$1代表第1列$2代表第2列。NF是一个内置变量全称是Number of Fields当前行的总列数。所以$NF就代表“最后一列”。 巧妙之处你的原文件里时间、大小、MD5码之间可能有多个空格导致列数不固定。如果用$7或$8可能会取错。但用$NF不管前面有多少列它永远只死死咬住最后一列OSS路径非常健壮。第三步| sed s/.*organized\///正则裁剪 原理拆解sed是流编辑器擅长对文本进行替换、删除。s/旧内容/新内容/是 sed 的替换语法Substitute。旧内容.*organized\/也是正则表达式.*匹配任意数量的任意字符贪婪匹配一路匹配到organized前面。organized字面匹配。\/因为 sed 的替换语法是用斜杠/做分隔符的s/A/B/如果匹配内容本身包含斜杠就必须加\转义。新内容//斜杠中间是空的意思就是把匹配到的那一长串前缀直接替换为空也就是删除。第四步 png_paths.txt重定向输出 原理拆解是标准输出重定向符。它会把前面所有命令的最终结果写入png_paths.txt。如果文件存在它会先清空原文件再写入保证每次运行都是干净的新结果。如果是则是追加到末尾。 架构师视角的延伸思考结合你的软考备考流式处理Stream Processing 这三个工具grep, awk, sed都不会把几个 GB 的 txt 文件一次性读进内存这会导致内存溢出。它们是读一行、处理一行、传给下一行。用空间换时间或者用流式处理避免内存峰值。模块化与高内聚低耦合管道哲学grep只负责“找”过滤。awk只负责“切”提取。sed只负责“改”替换。 每个工具只做一件事并做到极致然后通过管道|组合起来解决复杂问题。这其实就是软件架构中微服务/模块化设计的鼻祖思想。