在下一行中使用sed进行替换

在下一行中使用sed进行替换,sed,Sed,我正在使用sed命令将一些文本翻译成另一个文本 猫文本 <strong>ABC </strong> 通信: sed -e 's|<strong>(.*?)</strong>|//textbf{1}|g' 预期结果:\textbf{ABC} 但使用上面的脚本,我无法将其转换为预期的输出,因为标记之间有新行。如何处理这些

我正在使用sed命令将一些文本翻译成另一个文本

猫文本

           <strong>ABC
           </strong>
通信:

           sed -e 's|<strong>(.*?)</strong>|//textbf{1}|g'
预期结果:\textbf{ABC}

但使用上面的脚本,我无法将其转换为预期的输出,因为标记之间有新行。如何处理这些案件

sed -e 'N;s|<strong>\(.*\?\)\n</strong>|\/textbf{\1}|g'
正如CodeGnome和David Ravetti所说,N标志允许多行模式。

这可能适用于您(GNU-sed):


使用
n
n
使用sed构建多行模式空间。我使用sed-ne的| strong(.*)/strong |//textbf{1}| g'text,但我没有得到任何输出。如果不使用
-n
,则
n
在sed命令中。这里有一个链接,详细介绍了如何在sed中使用多行代码:我正在使用sed-e'N;s|strong(.*\?)\n/strong | \/textbf{\1}g'文本,但仍然没有更改。您缺少(.@cdbitesky-在您的示例中,您有
\?
…这是故意的吗?当我认为OP的意图是使
(.*
部分可选时,它似乎会搜索文本“?”(我认为这是不必要的,因为“*”应该匹配零或更多)。我认为\?可能没有必要。我只需要匹配标记中的任何内容。我的sed版本使用?as literal“?”,并且\?具有正则表达式字符。我不确定为什么。我有strong as br和in strong,比如strongABC strokebr//strong,我对使用上述内容感到有点困惑,因为它是嵌套的。
sed -r '$!N;s|(<)(strong>)([^\n]*)\n\s*\1/\2|//textbf{\3}|;P;D' file
sed '$!N;s|\(<\)\(strong>\)\([^\n]*\)\n\s*\1/\2|//textbf{\3}|;P;D' file