【问题标题】:Remove/replace html tags in bash删除/替换 bash 中的 html 标签
【发布时间】:2012-09-25 00:12:41
【问题描述】:

我有一个包含以下行的文件:

<li><b> Some Text:</b> More Text </li>

我想删除 html 标签并用破折号替换 &lt;/b&gt; 标签,所以它变成这样:

Some Text:- More Text

我正在尝试使用 sed,但是我找不到合适的正则表达式组合。

【问题讨论】:

标签: regex bash unix sed


【解决方案1】:

如果您严格想要去除所有 HTML 标记,但同时&lt;/b&gt; 标记替换为-,您可以用管道链接两个简单的sed 命令:

cat your_file | sed 's|</b>|-|g' | sed 's|<[^>]*>||g' > stripped_file

这会将所有文件的内容传递给第一个sed 命令,该命令将处理将&lt;/b&gt; 替换为-。然后,其输出将通过管道传送到sed,它将用空字符串替换所有 HTML 标记。最终输出将保存到新文件stripped_file

使用与@Steve 的另一个答案类似的方法,您还可以使用sed-e 选项将表达式链接到单个(非管道命令);通过添加-i,您还可以在不需要cat或新文件的情况下读取并替换原始文件的内容:

sed -i -e 's|</b>|-|g' -e 's|<[^>]*>||g' your_file

这将像上面的链式命令一样进行替换,但是这次它将直接替换输入文件中的内容。要改为保存到新文件,请删除 -i 并将 &gt; stripped_file 添加到末尾(或您选择的任何文件名)。

【讨论】:

  • 这帮助我修复了一些带有 variable="x" 类型文本的 xml 文件。使用s/' variable="'[^\"]*\"// 来匹配标签名称以及接下来两个双引号之间的所有内容。 (忽略单引号和转义双引号的时髦组合)
  • 推荐cat | sed | sed,然后顺便提一下,事实上你所需要的只是sed 似乎被误导了。 “你也可以”只是不推荐这种有缺陷的方法。
【解决方案2】:

一种使用GNU sed的方式:

sed -e 's/<\/b>/-/g' -e 's/<[^>]*>//g' file.txt

例子:

echo "<li><b> Some Text:</b> More Text </li>" | sed -e 's/<\/b>/-/g' -e 's/<[^>]*>//g'

结果:

 Some Text:- More Text

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 2019-09-03
    • 2015-10-15
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    相关资源
    最近更新 更多