命令行:替换换行符后跟字符
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>'
详情:
-0777
: 启用 slurp 模式以匹配换行符
/\h*\R+\h*([<'])
:匹配 0+ 个水平空格后跟 1+ 个换行符后跟 0+ 个空格和 <
或 '
。请注意,我们在第 1 组中捕获 <
或 '
。用 </code> 替换此匹配项,即我们在组 #1</li> 中捕获的 <code><
或 '
我想替换文件中的换行符 \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>'
详情:
-0777
: 启用 slurp 模式以匹配换行符/\h*\R+\h*([<'])
:匹配 0+ 个水平空格后跟 1+ 个换行符后跟 0+ 个空格和<
或'
。请注意,我们在第 1 组中捕获<
或'
。用</code> 替换此匹配项,即我们在组 #1</li> 中捕获的 <code><
或'