sed未终止的s命令-从html删除js调用

时间:2018-07-16 12:54:33

标签: sed

我想使用以下脚本从HTML中删除脚本调用。

var=$(sed  -e '/^<script.*</script>$/d' -e '/.js/!d' testFile.html)

sed -i -e "/$var/d" testFile.html 

样本输入文件:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>JavaScript</title>
<script type="text/javascript" src="script.js" language="javascript">
</script>

<script>
// script code
</script>
</head>
<body>

</body>
</html>

示例输出文件:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>JavaScript</title>

</script>

<script>
// script code
</script>
</head>
<body>

</body>
</html>

但是,它会出现以下错误。

sed: -e expression #1, char 23: unterminated `s' command

预先感谢

2 个答案:

答案 0 :(得分:0)

尝试

root@isadora:~/temp# sed -e '/^<script/,/<\/script>/d' aaaa.html 
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>JavaScript</title>

</script>

</head>
<body>

</body>
</html>
root@isadora:~/temp# 

Att。

答案 1 :(得分:0)

目前尚不清楚为什么将其分解为两个单独的脚本,或者希望变量包含什么。可以使用单个脚本简单地执行此操作。

直接的问题是,如果使用斜杠作为正则表达式分隔符,则不能在正则表达式中使用文字未转义的斜杠。可以使用其他分隔符,也可以反斜杠转义任何文字斜杠。

sed -i -e '\#^<script.*</script>$#d' -e '/\.js/!d' testFile.html

还要注意点之前的反斜杠(正则表达式中未转义的点与任何字符都匹配,因此/.js/与例如字符串 notjs 匹配)。