站点图标 moneyslow.com

sed替换2个特征字符串中间的内容

linux技巧

linux技巧

例如,典型的替换html代码片段,有1.html这个文件:

<script><script src="https://abc.com/hao.js"></script><script src="https://abc.com/hm.js"></script><script src="http://efg.com/ok.js" id="123"></script><script>

以上内容都是在一行,把其中的颜色字体去掉,可以这样:

公式:sed 's/startsrting.*endstring//'
命令(双引号和斜杠都要进行转义):
sed 's/<script src=\"http:\/\/efg.com.*<\/script>//' 1.html

结果为:

<script><script src="https://abc.com/hao.js"></script><script src="https://abc.com/hm.js"></script><script>

但是,如果替换的内容不在一行,在多行里,比如:

那么上面的命令就不好使了,可以用下面的命令:

公式:sed "/startstring/,/endstring/d" 
命令:
sed "/<script src=\"http:\/\/efg.com/,/<\/script>/d" 1.html

结果为:

<script>
<script src="https://abc.com/hao.js"></script>
<script src="https://abc.com/hm.js"></script>
</script>

参考:https://unix.stackexchange.com/questions/94616/removing-text-between-two-specific-strings

退出移动版