REGEX 搜索并用 sed 或其他命令替换

REGEX 搜索并用 sed 或其他命令替换

我有一个很大的 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 结束标记替换。

相关内容