我有一个很大的 SQL 文件,内容如下
[code language="bash"]
git checkout master
git pull origin master
...
[/code]
Lorem ipsum dolor sit amet, consectetur adipiscing elitUt enim ad minim
[code]some other code[/code]
veniam, quis nostrud exercitation
[code language="php"]var_dump($data);[/code]
我想替换[code language="{lang}"]{wrapped-code}[/code]
为<pre><code class="language-{lang}">{wrapped-code}</code></pre>
所以最终的输出看起来像
<pre><code class="language-bash">
git checkout master
git pull origin master
...
</code></pre>
Lorem ipsum dolor sit amet, consectetur adipiscing elitUt enim ad minim
<pre><code>some other code</code></pre>
veniam, quis nostrud exercitation
<pre><code class="language-php">var_dump($data);</code></pre>
请让我知道如何使用 sed 或其他查找和替换命令来实现此目的。
答案1
sed -e 's/\[code language="\([^"]*\)"\]/<pre><code class="language-\1">/' \
-e 's!\[/code\]!</code></pre>!' \
< input > output
方括号必须转义,以便它们不代表一组字符;然后,我捕获引号之间的文本以在替换中使用(如\1
);对于第二次搜索和替换,我用作!
分隔符以避免倾斜牙签综合症与 HTML 结束标记替换。