命令行:替换换行符后跟字符

command line: replace newline followed by character

我想替换文件中的换行符 \n 仅当下一行以可选空格和低于字符 \s*<.[=] 开头时 16=]

示例文本:

FIRST LINE ('<foo>
  <bar>
<baz>')

ANOTHER LINE 'lorem ipsim', '<dolor>
        <and>
            <p>again</p>
        </and>
</dolor>'

我需要在命令行上使用 sed、perl、tr...

我尝试了几个命令,但 none 目前有效。 基本上是:sed -i -e 's|\n+\s*\<|<|gm' filename

看起来 sed 看起来并不比换行更远。

https://regex101.com/r/VkRO9o/3

有什么命令可以做到这一点吗?

编辑:预期输出:

FIRST LINE '<foo>  <bar><baz>'

ANOTHER LINE 'lorem ipsim', '<dolor><and><p>again</p></and><dolor>'

空格不替换就好了

您可以为此使用 perl

perl -0777 -pe "s/\h*\R+\h*([<'])/$1/g" file
FIRST LINE ('<foo><bar><baz>')

ANOTHER LINE 'lorem ipsim', '<dolor><and><p>again</p></and></dolor>'

RegEx Demo

详情:

  • -0777: 启用 slurp 模式以匹配换行符
  • /\h*\R+\h*([<']):匹配 0+ 个水平空格后跟 1+ 个换行符后跟 0+ 个空格和 <'。请注意,我们在第 1 组中捕获 <'。用 </code> 替换此匹配项,即我们在组 #1</li> 中捕获的 <code><'