sed - 在模式中包含换行符

Goo*_*all 4 regex shell cygwin sed

我仍然是shell脚本的菜鸟,但我正在努力.下面是一个部分工作的shell脚本,它应该通过匹配标记并删除其附带的内容来从*.htm文档中删除所有JS.例如<script src="">,<script></script>和<script type="text/javascript">

find $1 -name "*.htm" > ./patterns
for p in $(cat ./patterns)
do
sed -e "s/<script.*[.>]//g" $p #> tmp.htm ; mv tmp.htm $p
done
Run Code Online (Sandbox Code Playgroud)

这个问题是脚本是因为sed逐行读取文本输入,这个脚本将无法按预期使用换行.运行:

<script>
//Foo
</script>
Run Code Online (Sandbox Code Playgroud)

将删除第一个脚本标记,但将省略我不想要的"foo"和结束标记.

有没有办法匹配我的正则表达式中的换行符?或者如果sed不合适,还有什么我可以使用的吗?

dev*_*ull 5

假设您<script>在不同的行上有标记,例如:

foo
bar
<script type="text/javascript">
some JS
</script>
foo
Run Code Online (Sandbox Code Playgroud)

以下应该有效:

sed '/<script/,/<\/script>/d' inputfile
Run Code Online (Sandbox Code Playgroud)