我在 html 文件中多次出现以下字符串
<br> <h4 id=...
现在,我知道 sed 可能不适合 html 编辑,但可以告诉我如何
替换br> <h4 id
with (其中 '\n' 是新行; andbr>\n <h4 id
之间有一个空格)?<br>
<h4...
我试过了sed 's/br> <h4 id/br> \n<h4 id/g' report.html
,但没有成功。在这个 stackexchange 上,还有关于 sed 和新行替换的其他问题,但它们不适用于我的情况。谢谢你!
更新:我正在 Windows 机器上运行 Visual Studio Code bash 终端和 (Git) Bash (这是某种 MINGW64)
答案1
命令替换部分中的换行符s
sed
可移植地表示为\
后跟换行符,因此:
sed 's/br> <h4 id/br>\
<h4 id/g' report.html
或者:
sed 's/\(br>\) \(<h4 id\)/\1\
\2/g' report.html
某些sed
实现\n
也允许这样做,但这是一个非标准扩展。
通过一些sh
实现(并且可能会在 POSIX 标准的下一个主要版本中成为标准),您可以使用$'...'
引号的形式(最初来自 ksh93),其中\n
扩展为换行符(和\\
反斜杠字符) 。因此,有了这些,你可以这样做:
sed $'s/\(br>\) \(<h4 id\)/\1\\\n\2/g' report.html
该标准的同一下一个版本还将引入选项-E
(sed
来自 BSDsed
来启用延长正则表达式允许您执行以下操作:
sed -E $'s/(br>) (<h4 id)/\1\\\n\2/g' report.html
答案2
尝试用
sed 's/br>[[:blank:]]*<h4 id/br> \n<h4 id/g'
br>
和之间可能有多个空格<h4
(或没有)。