根据html文件中的变量替换class



我有以下html:

<p>lore ipsum<p>
<pre class=".bashrc"><code>
foo bar
</code></pre>
<pre class="example.txt"><code>
foo bar
</code></pre>
<pre class="command"><code>
foo bar
</code></pre>
<p>lore ipsum<p>

…我想通过sed把它改成:

<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>

所以我的问题:每个<pre class="WHATEVER">都应该更改为<pre class="language-bash" data-label="WHATEVER">,这取决于前置标签的类名内部的内容。唯一的条件是:如果标签类为command (<pre class="command">),则不应更改。

sed -r 's/(class)=(.[Cc][Oo][Mm]{2}[Aa][Nn][Dd])/1x002/g; s/(class=)/1"language-bash" data-label=/g; s/(class)x00/1=/g;' file.html

通过标记和稍后取消标记异常,可以在不复杂的情况下完成常规替换。二进制零几乎不会出现在HTML中,所以不会发生冲突。