18、正则表达式与命令行工具的高效组合
2000/1/18大约 2 分钟
正则表达式与命令行工具的高效组合
命令行是自动化工程的核心阵地,正则表达式结合 grep、sed、awk 等工具可以快速解决文本处理问题。本篇总结常见技巧与脚本模式。
grep / ripgrep 搜索技巧
- 常规匹配:
rg "TODO" src快速扫描代码库中的标记。 - 正向前瞻:
rg -P "foo(?=\s+bar)"(-P启用 PCRE)。 - 反向引用替换:
rg -o "error (\d{3})" -r "$1"仅输出捕获组内容。
sed 正则替换
sed -E 's/^(\w+)=(.*)$/export \1="\2"/' .env > .env.export启用 -E 可以使用扩展正则。通过捕获组与替换,轻松生成新的配置文件。
awk 结合正则分列
awk 'match($0, /user=(?<user>\w+).*ip=(?<ip>[0-9.]+)/, groups) { print groups["user"], groups["ip"] }' access.logGNU awk 支持命名捕获组(4.2+),在脚本中直接访问匹配结果。
xargs 与正则批处理
rg -l "console\.log" src | xargs -I{} node scripts/remove-log.js {}正则筛选文件后交给 xargs 批量执行脚本,实现自动化重构或代码清理。
find + 正则
多数 find 实现支持 -regex:
find src -regex ".*\.(spec|test)\.[jt]sx?" -print当需要在文件路径层面使用正则时,这是比多次 -name 更灵活的方案。
常见坑点
- 兼容性差异:BSD
sed与 GNUsed语法存在差异,脚本需注明平台要求。 - 性能考虑:在海量文件上运行正则前可先用
--files-with-matches缩小范围。 - 转义混乱:Shell、正则双重转义,建议优先使用单引号包裹模式。
建议的脚本结构
- 将复杂正则写入变量或文件,避免脚本文本难以阅读。
- 对关键步骤加上
set -euo pipefail,提升稳健性。 - 在 CI 中配置预设环境,确保正则行为一致。
小结
将正则表达式与命令行工具结合,可以大幅提高日常开发与运维效率。掌握不同工具的正则方言,并对脚本进行充分测试,是打造高效 CLI 工具链的关键。