我有以下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中,所以不会发生冲突。