【问题标题】:How to filter out html tags using sed and regex [duplicate]如何使用 sed 和正则表达式过滤掉 html 标签 [重复]
【发布时间】:2019-10-29 22:09:51
【问题描述】:

我有一个脚本需要使用一个正则表达式从两个不同的文本中过滤掉 html 标签。我需要一个正则表达式的原因是传递给脚本的数据可能是任何一种文本格式。除了一些差异之外,文本通常具有相同的语法

这是我的脚本:

#!/bin/bash

text1="<CENTER><B>Jupiter: The Great Yellow Spot<BR>"
text2="<b> Curiosity Rover Finds a Clay Cache on Mars </b> <br> "

regex="s|.*<b>\(.*\)<b.*|\1|I"

some_text1=$(echo $text1 | sed $regex)
some_text2=$(echo $text2 | sed $regex)

echo $some_text1
echo $some_text2

该代码非常适合 text1,但在 text2 中留下了 &lt;/b&gt;

输出:

Jupiter: The Great Yellow Spot
Curiosity Rover Finds a Clay Cache on Mars </b>

如何确保它删除所有 html 标签?

【问题讨论】:

标签: bash sed


【解决方案1】:

如果您想删除从&lt; 开始直到下一个&gt; 的所有子字符串,您可以:

将所有出现的&lt; 后跟多个不同于&gt;&gt; 的字符替换为空。

在 sed 中是:

sed 's/<[^>]*>//g'

这不会删除跨越多行的标签。为此,您可以使用 GNU sed 扩展 -z 选项。

【讨论】:

  • 非常感谢我没有考虑过这个
猜你喜欢
  • 2011-07-03
  • 2012-11-03
  • 1970-01-01
  • 1970-01-01
  • 2014-06-16
  • 2015-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多