sed批量删除HTML标签的核心思路是匹配并移除成对尖括号及其内容,但因是行处理工具,无法完美解析嵌套或跨行结构,仅适合清理简单规整的HTML片段。

用 sed 批量删除 HTML 标签,核心思路是匹配并移除成对的尖括号及其内容。但要注意:sed 是行处理工具,无法完美解析嵌套或跨行 HTML 结构,适合清理简单、格式较规整的 HTML 片段(比如从网页提取纯文本摘要、清洗日志中的内联标签等)。
基础命令:删除单行内的所有标签
最常用的一条命令是:
sed 's/]*>//g'
说明:
立即学习“前端免费学习笔记(深入)”;
匹配左尖括号-
[^>]*匹配任意数量的“非右尖括号”字符(即标签内部内容,不含>) -
>匹配右尖括号 -
g表示全局替换(一行中多个标签全删)
例如:
输入:Hello <b>world</b> and <i>HTML</i>!
输出:Hello world and HTML!
处理换行标签(如 <br>、<p> 等自闭合或跨行标签)
默认正则只处理单行,若 HTML 中有换行(如 <p>\nHello</p>),需先合并多行为单行再处理,或分步清理。更稳妥的做法是两遍处理:
sed ':a;N;$!ba;s/\n/ /g; s/]*>//g'
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
说明:
立即学习“前端免费学习笔记(深入)”;
-
:a;N;$!ba是 sed 经典的“读入全部行到模式空间”技巧(把整个文件当一行处理) -
s/\n/ /g把换行符替换成空格(避免内容粘连,可按需改为\n或) - 最后再执行标签清除
增强健壮性:过滤常见干扰情况
实际文本中可能混有 HTML 实体(如 &、<)、注释 <!-- ... --> 或 JS/CSS 块,可叠加处理:
sed -e ':a;N;$!ba' \ -e 's///g' \ -e 's/<script>]*>.*<\/script>//gs' \ -e 's/<style[^>]*>.*<\/style>//gs' \ -e 's/<[^>]*>//g' \ -e 's/&/\&/g; s/</; s/>/>/g'</script>
注意:
-
s/...//gs中的s标志让.匹配换行符(GNU sed 支持) - JS/style 清理使用贪婪匹配,适用于无复杂嵌套的简单脚本块;含嵌套时仍建议用专用 HTML 解析器(如
xmlstar、pup或 Python 的BeautifulSoup) - 实体解码只做基础三项,完整解码需额外工具
安全批量处理文件
直接修改原文件风险高,推荐先预览再操作:
- 预览效果:
sed 's/]*>//g' file.html - 保存为新文件:
sed 's/]*>//g' file.html > clean.txt - 原地编辑(备份原文件):
sed -i.bak 's/]*>//g' *.html
不复杂但容易忽略:确保输入是 UTF-8 编码,避免 sed 处理中文时乱码;如有 BOM 头,可先用 sed '1s/^\xEF\xBB\xBF//' -i file 清除。


















