sed 以删除两个模式之间的内容



可能的重复项:
使用 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之间的所有内容

相关内容

  • 没有找到相关文章

最新更新