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>标签,同样会被删除。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: sed命令是一种文本处理工具,可以用于对文本进行替换、删除、插入等操作。它通常与管道符一起使用,可以方便地对文本进行批量处理。sed命令的语法比较复杂,但是掌握了它的基本用法,就可以轻松地处理文本文件。 ### 回答2: sed是Linux系统强大的文本处理工具,它的全称为Stream Editor,其功能主要用来对文本进行替换、删除、插入、追加、打印等无数用途。它可以满足编程人员对文本处理的各种要求,是命令行编程十分常用的一个工具。 sed命令的一般格式为: ``` sed [选项] 'sed命令' 文件名 ``` 其,选项可以为空,也可以是: - -n:只打印修改过的行 - -i:替换原文件 sed命令的具体用法: 1.删除 使用sed命令可以轻松删除想要去除的文本的行或者一个词语。例如,在文件删除含有某个特定字符串的所有行,我们可以使用如下命令: ``` sed '/特定字符串/d' 文件名 ``` 此时,文件与特定字符串匹配的所有行都将被删除。 如果需要清除一段文本包含的所有注释,我们可以使用如下命令: ``` sed -i '/^#/d' 文件名 ``` 这个命令删除包含在行首的所有以#开头的注释行。 2.替换 虽然像vim这样的文本编辑器也可以替换字符串,但是在sed处理这个任务更快更有效率。下面是一段用于替换文件内容的sed命令: ``` sed 's/原字符串/新字符串/g' 文件名 ``` 这个命令会将文件所有的“原字符串”全部替换成“新字符串”,并将结果输出到命令行。 除此之外,我们还可以使用类似如下形式的命令: ``` sed '/要替换的文本/s/替换前的字符串/替换后的字符串/g' 文件名 ``` 这个命令会直接查找到要替换的文本,并将其内部的“替换前的字符串”全部替换成“替换后的字符串”。 3.插入和追加 使用sed命令,可以在文件插入新的文本,通常新文本会作为一个新行插入到原文件的某一行之后。为了插入,我们可以用如下命令: ``` sed -i '/想要插入的行数/a 插入行内容' 文件名 ``` 这个命令会将“插入行内容”插到文件的“想要插入的行数”所在行之后。 4.打印 最后,我们也可以使用sed命令来打印指定的文本,通过这样的方式我们可以筛选文本的重点信息。使用sed进行文本打印时可以用如下语法: ``` sed -n '需要打印的行号' 文件名 ``` 例如,如果我们需要打印一个文件的前5行,可以使用如下命令: ``` sed -n '1,5p' 文件名 ``` 这个命令会打印出文件的前5行,输出到命令行。 总之,sed是Linux编程不可或缺的基本工具之一,它的强大功能可以简化文件管理、文本处理和脚本编写的过程,对于Shell编程来说是一种非常重要的技能。 ### 回答3: sed是一个非常强大的文本处理工具,其含义是“流编辑器(stream editor)”,是用于过滤和转换文本的工具之一,其可将文本流进行处理,可以取代大部分grep命令功能,而且其功能极其强大。一般在命令行下直接执行,也可以应用正则表达式RE将文本的指定字符串进行替换。 1.替换命令shellsed最常用的命令之一就是替换命令,语法格式为:sed 's/old/new/g' filename 其,s为替换命令的操作符,old代表原来的字符串,new代表新的字符串,g表示全局替换,也就是一行内所有字符串替换。这个命令可以在一个文件替换多个字符串,替换所有匹配到的字符串。文件名可以是多个,也可以使用通配符。 2.删除命令 除了替换命令sed还可以用于删除删除命令的语法格式为:sed '/pattern/d' filename 其,pattern表示匹配的字符串,在该文件所有匹配的行都将被删除掉。 3.插入和追加命令 此外,sed还可以用于在指定的行前插入文本或在指定的行后追加文本。插入命令的语法格式为:sed '/pattern/i\insert text' filename,其插入文本按照需要进行定义,而追加则是sed '/pattern/a\append text' filename。 4.打印命令 sed还可以用于打印出符合条件的行。打印命令的语法格式为:sed -n '/pattern/p' filename。其,-n选项的作用是只输出匹配到的行,p选项则是打印出匹配到的行。 5.替换文本方式 在sed的替换命令,有三种常用的替代符:/、! 和#,它们的一个用于分离 sed 命令的三个部分:地址、命令和选项。您在使用这些符号时可以选择其他符号来代替为补充其实现使用的特性来简化编码和排错。 总之,sed是一款非常实用的文本处理工具,在Linux系统有很大的应用场景,特别适合需要在命令操作的用户,可以大大提高工作效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值