问题描述
当下一行以可选空格开头且比字符\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>'
详细信息:
-
-0777
:启用slurp模式以在换行符之间进行匹配 -
/\h*\R+\h*([<'])
:匹配0+个水平空格,后跟1+个换行符,然后匹配0+个空格和<
或'
。请注意,我们正在捕获#1组中的<
或'
。将此匹配项替换为我们在#1组中捕获的$1
或<
的{{1}}