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

问题描述

当下一行以可选空格开头且比字符\n低时,我只想 替换文件中的换行符\s*<

示例文字

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

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

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

我尝试了几次命令,但到目前为止都没有奏效。 基本上是: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组中的<'。将此匹配项替换为我们在#1组中捕获的$1<的{​​{1}}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...