我有一个脚本,它接受来自wget
或 类似的输入,并使用 在其中搜索关键词grep
。(我保证我不会尝试使用正则表达式解析 HTML,这只是一种方便的方式来模拟我们在另一个更复杂的产品中的内容检测行为。)只要 HTML 内容没有被过度压缩,这种方法就很好用。如果被过度压缩,行可能会变得很长(我见过有些情况下超过 50 kB),并且grep
会阻塞它们。
为了解决这个问题,我希望能够折叠或重新缩进 HTML,以便将其分散到更多行。但是,为了让脚本给出准确的结果,我需要能够在不改变内容的情况下做到这一点。这意味着它无法纠正无效或未关闭的标签,并且它只能在元素之间折叠,而不是在元素内部折叠。
这两个要求似乎排除了我发现的所有 HTML 整理或美化实用程序。
是否有任何基于 UNIX 的 shell 实用程序、perl/python/ruby 模块或类似程序可以为我做到这一点?
或者,因为我所需要的只是在标签之间添加一些新行,有没有办法可以让我半可靠地自己做到这一点?
答案1
好的,对于其他有需要的人,我正在记录所提出的建议这个很棒的帖子(如果该链接出现故障,按照 StackExchange 指南):
HTB 2.0 - 基于 DOS -http://www.digital-mines.com/htb/
Tabifier - 支持 CSS、HTML 和 C 样式语法(包括 Javascript)-http://tools.arantius.com/tabifier
HTML-Kit - 一个在 Windows 上运行的功能齐全的免费 HTML 编辑器,您需要配置 TIDY 选项 [工具 /使用 Tidy 检查代码 /添加新配置],取消选中除“仅输出正文内容”和“将不间断空格转换为实体”之外的所有开关,然后转到操作/工具/HTML Tidy /缩进标签或美化 -http://www.chami.com/html-kit/
SCREEM-仅适用于Linux-
NetBeans - “使用 NetBeans 打开 html 文件后,单击“源”,然后选择“格式”。就这样。” -
WebmasterGate 的 HTML / XHTML 美化器 - 在线工具 -http://www.webmastergate.com/html-beautifier/
Aptana Studio(版本 2.0.4)-“选择编辑 > 格式或按 Ctrl-Shift F 来格式化 html 代码。可以从窗口 > 首选项中配置格式化功能,然后选择 Aptana > 编辑器 > HTML > 格式化,单击编辑以添加不应占用新行的标签,然后将其保存为新的首选项。”-
UniversalIndentGUI - 内部使用 HTB Beautifier - 运行 Notepad++ 时,转到插件 > 插件管理器 > 显示插件管理器,从可用列表中选择 UniversalIndentGUI 进行安装。
整理一下这些选项:
(填充文本,因为当代码直接跟在项目符号后面时,Markdown 引擎似乎会出现问题)
[HTML, XHTML, XML Options]
anchor-as-name:no
doctype:omit
drop-empty-paras:no
fix-backslash:no
fix-bad-comments:no
fix-uri:no
input-xml:yes
join-styles:no
lower-literals:no
preserve-entities:yes
quote-ampersand:no
quote-nbsp:no
[Diagnostics Options]
show-warnings:no
[Pretty Print Options]
indent:yes
indent-spaces:3
tab-size:3
[Miscellaneous Options]
quiet:yes
我还没有尝试这些选项(input-xml: yes
以及force-output: yes
提到的 HTML tidy 的配置建议https://stackoverflow.com/questions/7151180/use-html-tidy-to-just-indent-html-code适用于我的直接目的),如果我这样做,我会更新这个答案。
答案2
答案3
无需解析/修复文档即可执行此操作的最简单方法是查找结束标记,后跟左尖括号或空格,然后插入换行符。搜索:
(</[^>]+>)(<|\s)
并替换为
$1\n$2
您仍需要手动检查每个输出文档并确认它没有破坏任何内容,但这在大多数情况下应该有效。它不会输出漂亮的输出,但它应该会消除 50KB 行。
答案4
另一个选择是使用小狗无参数:
pup
使用xmllint
--html
HTML 解析器并--format
重新格式化输入。STDIN 的破折号不能省略。
xmllint --format --html -
XmlStarlet 还支持使用 HTML 解析器。fo
是 的缩写format
。请参阅xml fo -h
了解帮助。
xml fo --html
的主要实现tidy
不支持HTML5,但是tidy-html5像在 OS X 中一样brew install tidy-html5
安装。tidy-html5
/usr/local/bin/tidy