Sed 从 html 文件中删除标签

2024-10-17 08:47:00
admin
原创
65
摘要:问题描述:我需要使用 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 
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用