Sed 从 html 文件中删除标签

2024-10-17 08:47:00
admin
原创
224
摘要:问题描述:我需要使用 sed 命令通过 bash 脚本从 html 中删除所有标签。我尝试过这个sed -r 's/[<][/]?[a-zA-Z0-9=\"-#.& ]+[/]?[>]//g' $1 并且sed -r &...

问题描述:

我需要使用 sed 命令通过 bash 脚本从 html 中删除所有标签。我尝试过这个

sed -r 's/[<][/]?[a-zA-Z0-9=\"-#.& ]+[/]?[>]//g' $1

并且

sed -r 's/[<][/]?[.]*[/]?[\\]?[>]//g' $1

但我仍然遗漏了一些东西,有什么建议吗?


解决方案 1:

您可以使用众多HTML 到文本转换器之一,如果可能的话,使用 Perl 正则表达式<.+?>,或者如果必须sed使用<[^>]*>

sed -e 's/<[^>]*>//g' file.html

如果没有出错的余地,请改用 HTML 解析器。例如,当一个元素分布在两行上时

<div
>Lorem ipsum</div>

这个正则表达式不起作用。


此正则表达式由三部分组成<,,[^>]*`>`

  • 搜寻空缺<

  • 后跟零个或多个字符*,这些字符不是结尾字符>

[...],是字符类,当它以 开头时,^查找不属于该类的字符

  • 最后寻找结束>

更简单的正则表达式<.*>不起作用,因为它会搜索最长的匹配项,即>输入行中的最后一个结束符。例如,当输入行中有多个标签时

<name>Olaf</name> answers questions.

将导致

回答问题。

而不是

奥拉夫回答问题。

另请参阅使用星号和加号的重复,尤其是小心贪婪!部分以及后续内容,以获得详细解释。

解决方案 2:

我知道 OPsed特别要求了,但即使对于非 sed 搜索者来说,这个页面也是 Google 中的最佳搜索结果。

Perl 一行程序

cat - | perl -pe 's{
}{ }g' | perl -pe 's{>}{>
}g' | perl -pe 's{<}{
<}g' | grep -v '<' | grep -v '^s*$'

请随意编辑它(我已将其标记为社区维基),它并不完美。

解释

对于我来说现在要输入的内容太多了,但是explainshell.com是一个开始。

其他说明

我很惊讶没有成熟的工具可以做到这一点,只有大量混乱的 npm 命令行工具。我不喜欢 npm 留下的大量垃圾。一个 golang 预编译的单个二进制文件或 via 之类的东西brew install将是终极梦想

解决方案 3:

我经常用它lynx -dump -nolist <URL>来达到原帖的目的。但是,你仍然需要格式化,所以你可能想要额外删除每行开头的空格。

解决方案 4:

虽然远非完美,但对我来说已经足够了:

curl -Ls https://stackoverflow.com | # load html content
tr -d '
' |                         # remove carriage return
tr '
' '
' |                       # replace line breaks against carriage return to allow sed to replace across multiple lines
sed -E "s//(script|style)>/
/g" |  # replace closing script/css tags against new line
sed -E "s/<(script|style).*//g" |    # replace whole script/css blocks ungreedy
sed -E 's/(="[^"]*)>//g' |         # replace closing bracket inside of double quotes
sed -E "s/(='[^']*)>//g" |         # replace closing bracket inside of single quotes
sed "s/<[^>]*>/ /g" |                # replace all other html tags against white space
tr '
' '
' |                       # replace carriage return against new line
tr '    ' ' ' |                        # replace tabulator against white space
tr -s ' ' |                          # reduce consecutive white space
sed "s/^ //g" |                      # remove white space from the beginning of each line
grep -v "^$"                         # remove empty lines

返回:

Stack Overflow - Where Developers Learn, Share, & Build Careers 
Stack Overflow 
About 
Products
For Teams 
Stack Overflow 
Public questions & answers 
Stack Overflow for Teams 
Where developers & technologists share private knowledge with coworkers 
Talent 
Build your employer brand
Advertising 
Reach developers & technologists worldwide 
Labs 
The future of collective knowledge sharing 
About the company 
Loading… 
current community 
Stack Overflow
help 
chat 
...
API
Data
Blog 
Facebook 
Twitter 
LinkedIn 
Instagram 
Site design / logo © 2024 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2024.3.22.6753 
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2302  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1496  
  医疗器械企业在运营过程中,合规性是至关重要的一环。确保产品符合各种法规和标准要求,不仅关乎企业的声誉和生存,更直接影响到患者的安全和健康。产品生命周期管理(PLM)作为一种整合产品全生命周期信息的管理理念和技术,能够为医疗器械企业提供强大的支持,助力其实现合规性目标。通过有效的PLM系统,企业可以对产品从概念设计到退役...
plm主要包含哪四个模块   14  
  汽车零部件行业竞争激烈,产品质量与生产效率至关重要。PLM(产品生命周期管理)系统的实施能有效整合产品数据、优化流程,提升企业竞争力。然而,实施过程中会面临诸多挑战与缺陷,借助科学的缺陷管理工具并制定持续改进方案,是确保PLM系统成功实施并发挥最大价值的关键。PLM系统在汽车零部件行业的重要性PLM系统贯穿汽车零部件从...
plm开源软件   15  
  PLM(Product Lifecycle Management)系统,即产品生命周期管理系统,是一种对产品从概念设计到报废处理的全生命周期进行管理的信息化解决方案。在军工领域,PLM系统的应用正发挥着越来越重要的作用,为军工企业的发展提供了强大的支持。提升产品研发效率在军工产品研发过程中,涉及众多复杂的环节和大量的专...
plm管理系统   10  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用