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