在bash中删除/替换html标签

thi*_*zy4 9 regex unix bash sed

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

<li><b> Some Text:</b> More Text </li>
Run Code Online (Sandbox Code Playgroud)

我想删除html标签并用</b>短划线替换标签,所以它变成这样:

一些文字: - 更多文字

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

new*_*rey 14

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

cat your_file | sed 's|</b>|-|g' | sed 's|<[^>]*>||g' > stripped_file
Run Code Online (Sandbox Code Playgroud)

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

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

sed -i -e 's|</b>|-|g' -e 's|<[^>]*>||g' your_file
Run Code Online (Sandbox Code Playgroud)

这将像上面的chained-command一样进行替换,但这次它将直接替换输入文件中的内容.要保存到新文件,请删除-i并添加> stripped_file到末尾(或您选择的任何文件名).