shell使用sed命令删除html中的所有script标签

我的脚本
/<script/{
    : START;
    s#</script>#&#;
    t DEL;
    : LOOP;
    N;
    s#</script>#&#;
    t DEL;
    b LOOP;
    : DEL;
    s#<script.*</script>##;
    s#<script#&#;
    t START;
    }

将上述代码保存到deljs.sed文件中,使用以下命令调用:

sed -f deljs.sed demo.html 

另外,如果不想使用sed脚本文件的形式,也可以将sed脚本中的代码写成一行,方便放到shell中,使用下述命令:

sed '/<script/{: START;s#</script>#&#;t DEL;: LOOP;N;s#</script>#&#; t DEL;b LOOP;: DEL;s#<script.*</script>##;s#<script#&#;t START;}' demo.html
脚本详解

参考自sed命令的man文档

  1. /<script/{

    对字符串"<script"进行寻址,找到后执行一个命令块。
    { :开始一个命令块(以}结尾)。

  2. : START;

    设置一个名为"START"的标签。
    : label :用于btT命令的标签。

  3. s#</script>#&#;

    执行替换命令,将字符串"</script>“替换为”</script>"。
    s/regexp/replacement/:使用正则表达式regexp与模式空间进行匹配,如果匹配成功,替换为匹配的部分为replacementreplacement可能包含特殊字符&来代指模式空间中与之匹配的部分,或者转义字符\1\9来代指正则表达式regexp中对应的匹配子表达式。

  4. t DEL;

    如果上述替换命令执行成功,跳转到名为"DEL"的标签处。
    t label :如果自从读入当前行,并且自上一条tT命令到现在,有一条s///替换命令执行成功,就跳转到指定的标签处,如果不指定标签,则跳转到脚本结束。
    T label :与t label相反,如果没有s///替换命令执行成功,则跳转到指定的标签处。

  5. : LOOP;

    设置一个名为"LOOP"的标签。

  6. N;

    将下一行加入模式空间。
    n N读取/追加下一行输入,到模式空间。

  7. s#</script>#&#;

    执行替换命令,将字符串"</script>“替换为”</script>"。

  8. t DEL;

    如果上述替换命令执行成功,跳转到名为"DEL"的标签处。

  9. b LOOP;

    跳转到名为"LOOP"的标签处。
    b label :跳转到指定标签处,如果未指定标签,则跳转到脚本结束。

  10. : DEL;

    设置一个名为"DEL"的标签。

  11. s#<script.*</script>##;

    执行替换命令,将正则表达式"<script.*</script>"匹配到的模式空间中的内容替换为空。

  12. s#<script#&#;

    执行替换命令,将字符串"<script"替换为"<script"。
    用于防止上一个标签对的</script>与下一个标签对的<script>在同一行的情况。

  13. t START;

    如果上述替换命令执行成功,跳转到名为"START"的标签处。

  14. }

    结束一个命令块。

注意事项
  1. 上述方法只是删除了html中的所有<script>标签,并没有删除html中所有的js,因为js还可以直接内嵌到html的其他标签中,比如,引用自NotFoundObject大佬的一篇博客《js在HTML中的三种写法》原文链接

    <!--当鼠标点击图片时跳出弹窗显示1223-->
        <div class="img">
        单击事件:
            <img src="images/001.jpg" onclick="alert(1223)"></img>
        </div>
    
  2. 如果html正文中存在<script>标签,同样会被删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值