如何解决命令行:替换换行符,后跟字符
当下一行以可选空格开头且比字符\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}}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。