在bash中删除/替换html标签

时间:2012-10-04 01:18:26

标签: regex bash unix sed

我的文件包含以下行:

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

我想删除html标记,并用短划线替换</b>标记,使其变为如下所示:

一些文字: - 更多文字

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

2 个答案:

答案 0 :(得分:14)

如果您严格要删除所有HTML标记,但同时</b>标记替换为-,则可以链接两个简单的{{1带管道的命令:

sed

这会将所有文件的内容传递给第一个cat your_file | sed 's|</b>|-|g' | sed 's|<[^>]*>||g' > stripped_file 命令,该命令将把sed替换为</b>。然后,它的输出将通过管道传递给-,它将用空字符串替换所有HTML标记。最终输出将保存到新文件sed

使用与@Steve的其他答案类似的方法,您还可以使用stripped_file的{​​{1}}选项将表达式链接到单个(非管道命令);通过添加sed,您还可以读入并替换原始文件的内容,而无需-e或新文件:

-i

这将像上面的chained-command一样进行替换,但是这次它将直接替换输入文件中的内容。要保存到新文件,请删除cat并将sed -i -e 's|</b>|-|g' -e 's|<[^>]*>||g' your_file 添加到结尾(或您选择的任何文件名)。

答案 1 :(得分:0)

使用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