可能的重复项:
使用 BASH 脚本从 HTML 表中提取数据
我有一个包含以下内容的 html 文件。我想使用 sed 删除模式< script ..... >
和</script>
之间的所有内容(多行),其余内容保持不变。我还想删除标签。
任何帮助将不胜感激。 谢谢!我尝试了以下两种方法,但没有运气。
cat test.html | tr -d 'n' | sed 's/< script.*</script>//g' > output.txt
和
sed '/< script/,/</script>/d' test.html > output.txt
don't touch this.
this is not to be removed < script bla bla> this is to be
removed. < /script> this is going to
stay < script bla bla bla bla bla> remove this
and this
and this < /script> and this stays as is.
this too.
怎么样:
cat yourfile | tr -d 'n' | sed -e 's,< script.*< /script>,,g'
注意结束标记中的空格
这可能对你有用(GNU sed):
sed ':a;$!{N;ba};/x00/q1;s/<s*/?script[^>]*>/x00/g;s/x00[^x00]*x00//g' file
它可能会失败的可能性很小,因为 HTML 文件包含十六进制代码x00
在这种情况下,返回代码将被1
,文件输出将保持不变。
解释:
-
:a;$!{N;ba}
将文件压缩到模式空间中 -
/x00/q1
检查文件中的十六进制代码x00
,如果找到,则退出,返回代码为1
-
s/<s*/?script[^>]*>/x00/g
将所有script
开始和结束标记替换为x00
-
s/x00[^x00]*x00//g
删除x00
之间的所有内容