0

可能重复:
使用 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.

4

2 回答 2

0

这可能对您有用(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}将文件 slurp 到模式空间中
  • /\x00/q1检查文件的十六进制\x00代码,如果发现退出,返回代码为1
  • s/<\s*\/\?script[^>]*>/\x00/g将所有script开始和结束标签替换为\x00
  • s/\x00[^\x00]*\x00//g删除\x00's之间的所有内容
于 2012-09-26T07:13:11.310 回答
0

关于什么:

cat yourfile | tr -d '\n' | sed -e 's,< script.*< /script>,,g'

注意结束标签中的空格

于 2012-09-25T16:44:06.437 回答