如何用sed或awk替换HTML标签中的文本?
替换HTML中favicon链接的sed/awk正确实现
问题根源
你之前的sed命令报错是因为用了/作为替换分隔符,而目标HTML标签里包含/(比如image/x-icon里的斜杠),sed会把这个斜杠当成替换命令的结束标记,导致语法错误。
解决方案
1. sed 实现(推荐)
换用非斜杠的分隔符(比如#),同时用精准正则匹配href的内容:
sed 's#<link href="[^"]*" rel="icon" type="image/x-icon" />#<link href="${favicon}" rel="icon" type="image/x-icon" />#g' input.html > output.html
#作为替换命令的分隔符,避开标签内的斜杠冲突[^"]*匹配双引号内的任意内容(除了双引号),确保只替换href属性的值- 末尾的
g表示全局替换(如果页面有多个符合的标签)
2. awk 实现
通过匹配目标行,替换指定属性:
awk '/<link href="[^"]*" rel="icon" type="image\/x-icon" \/>/{sub(/href="[^"]*"/, "href=\"${favicon}\"")}1' input.html > output.html
- 先筛选出包含目标favicon标签的行,注意这里斜杠需要转义成
\/ sub()函数专门替换行内的匹配部分,精准定位href属性- 最后的
1是awk的简写,意为打印所有行(修改后的行和未匹配的行都会输出)
内容的提问来源于stack exchange,提问作者macder
相关产品推荐
相关产品推荐

