一段文本如下
fasdfasdfasd
<!-- Tocplus 15.1 -->
1111
333
333
333
333
<!-- End of Tocplus -->
fasdfasdfasd
正则格式如下
<\!-- Tocplus 15.1 -->[\d\D]*<\!-- End of Tocplus -->
在线测试没有问题,执行 sed 无法匹配
sed -i 's/<!-- Tocplus 15.1 -->[\d\D]*<!-- End of Tocplus -->/o/g' test
-z
参数改变行分隔符为\0
,从而把整个文件当成一行。(文件太大的话可能会有问题)\d
与\D
。它可以使用[[:digit:]]
表示数字,但是没有表示非数字。参考这里。你在网上实验的并不一定是 sed 的语法。所以,还不如直接用.
。所以,对于你这个小文件,
sed -z -i 's/<!-- Tocplus 15.1 -->.*<!-- End of Tocplus -->/o/g' test
可以搞定。