Linux 管道(Pipeline)作业

命令: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。如果文件存在,它会先清空原文件再写入 (保证每次运行都是干净的新结果)。如果是 >> 则是追加到末尾。

🌟 架构师视角的延伸思考(结合你的软考备考)

  1. 流式处理(Stream Processing) : 这三个工具(grep, awk, sed)都不会把几个 GB 的 txt 文件一次性读进内存(这会导致内存溢出)。它们是读一行、处理一行、传给下一行 。用空间换时间,或者用流式处理避免内存峰值。
  2. 模块化与高内聚低耦合(管道哲学) :
    • grep 只负责"找"(过滤)。
    • awk 只负责"切"(提取)。
    • sed 只负责"改"(替换)。 每个工具只做一件事,并做到极致,然后通过管道 | 组合起来解决复杂问题。这其实就是软件架构中微服务/模块化设计的鼻祖思想。
相关推荐
星恒随风7 小时前
Linux网络编程:彻底理解IO多路复用select!从fd_set位图、读写就绪到手写TCP多客户端字典服务器
linux·服务器·网络
陈布衣7 小时前
MySQL(1)_MySQL 5.7.21 Linux 安装笔记
linux·笔记·mysql
分布式存储与RustFS9 小时前
给 RustFS 桶加一层内存缓存:用 Alluxio 让热数据少跑一遍网络
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
Oiiouui9 小时前
linux服务器部署Logto后端与对应前端的实现
linux·服务器·前端·后端
ITKEY_10 小时前
用 Emacs Dired 实现 em:退出文件管理器后,让终端自动切换目录
linux·服务器·emacs
wt952710 小时前
VMware 虚拟机磁盘扩容实战文档(Ubuntu 22.04 + LVM)
linux·后端
就像楞次定律10 小时前
【Linux 学习记之二】C++ 构建体系与底层链接机制的深度透视(2)
linux·后端
Decay__10 小时前
22_MySQL 运维自动化平台 —— 部署编排 + 监控 + 巡检 + 告警 + 工单闭环一体化
运维·数据库·sql·mysql·架构
无足鸟ICT10 小时前
【RHCA+】slabtop命令(查看slab缓存)
linux
且从容.10 小时前
Ubuntu 安装 Docker
linux·ubuntu·docker