You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用sed批量替换HTML中<pre>标签的class属性(保留特定例外)

如何用sed批量替换HTML中
标签的class属性(保留特定例外) 

嘿,这个需求很明确,我给你提供两种sed解决方案,兼顾兼容性和精准性:

方案一:兼容所有版本的sed(包括BSD/macOS默认sed)

这种方法思路简单直接:先统一替换所有符合格式的<pre>标签,再把例外的command类还原回去,操作起来不容易出错,兼容性拉满:

sed -E '
  s/<pre class="([^"]+)"/<pre class="language-bash" data-label="\1"/g;
  s/<pre class="language-bash" data-label="command"/<pre class="command"/g
' input.html > output.html

命令解释:

  1. 第一行:用正则捕获<pre class="XXX">里的XXX,把整个标签替换成<pre class="language-bash" data-label="XXX">,\1就是我们捕获到的原class值
  2. 第二行:把被错误替换的command类标签还原回原来的<pre class="command">,完美避开例外情况

方案二:GNU sed专属的精准替换(一步到位)

如果你的系统用的是GNU sed(比如Linux默认的sed),可以利用负向预查直接跳过command类的标签,一步完成替换:

sed -E 's/<pre class="(?!command)([^"]+)"/<pre class="language-bash" data-label="\1"/g' input.html > output.html

命令解释:

  • (?!command)是负向预查,它会确保<pre class="后面的内容不是command,这样就不会匹配到<pre class="command">的标签
  • 剩下的逻辑和方案一一致,捕获原class值并替换成目标格式

效果验证

拿你提供的示例输入测试,两种方案都会输出你想要的结果:

<p>lore ipsum<p>

<pre class="language-bash" data-label=".bashrc"><code>

foo bar

</code></pre>

<pre class="language-bash" data-label="example.txt"><code>

foo bar

</code></pre>

<pre class="command"><code>

foo bar

</code></pre>

<p>lore ipsum<p>

备注:内容来源于stack exchange,提问作者Chrissss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 10:57:40