
本文讲解如何用 sed 命令在 html 文件中精准定位某一行(如 `href="styles.css” />`),并在其**正前方插入一行新内容**,重点解决因缩进空格导致匹配失败的常见问题。
在处理 html 或其他格式化文本时,直接使用 sed ‘/pattern/i text’ 插入内容看似简单,却极易因空白符(空格、制表符) 导致匹配失败。例如,原始 HTML 中 行通常被缩进(如前面有 2 个空格或 1 个 tab),而正则表达式中若写 /^ ✅ 正确做法是:允许并跳过行首可能存在的空白符。推荐使用 POSIX 字符类 [[:space:]]*(兼容空格、tab、换行符等): ⚠️ 注意事项: ? 小结:^ 不等于“可见内容开头”,而是“物理行首”。处理缩进文本时,始终优先考虑 [[:space:]]* 前缀;若追求更高可靠性,可结合 awk 或专用 HTML 工具(如 xmlstar、pup)进行结构化操作——但对轻量级自动化任务,修正后的 sed 已足够精准高效。sed '/^[[:space:]]*]*rel="stylesheet"[^>]*href="[^"]*styles.css"[^>]*>/i ' test.html