仅比较HTML文件正文的Bash diff

3
我正在编写一个Shell脚本来跟踪网站的变化,并且如果有变化,给我发送变化内容的电子邮件。 我的想法是使用wget获取html文件的副本,并将其与上次运行脚本时的版本进行比较。 Wget用于保存html文件效果良好,但我在比较文件时遇到了问题。问题在于,我只对html文件中纯文本部分的更改感兴趣,而不是代码、链接等等。 Diff用于查找两个文件中的所有更改,但即使纯文本相同,它也始终返回更改结果。这是因为网站上的每个链接都有一个相应的身份验证令牌,该令牌每次访问页面时都会发生更改。为了仅diff包括纯文本的行,我尝试将其过滤以排除以“<”或“(any_amount_of_spaces)<”开头的任何行。 我已经查看了Diff man页面,但似乎找不到能够满足我的需要的操作符。我对REGEX知之甚少,但是否可以使用diff-I进行解决? 谢谢!

您可以查看类似 https://dev59.com/fnE85IYBdhLWcg3wgDpI 的示例。 - fedorqui
1个回答

3
你可以使用lynx -dump来渲染页面并将其提供给diff,但由于你不关心链接,你需要摆脱此操作产生的References部分(例如使用awk),因此这不是一个非常健壮的解决方案(但对于你的用例可能足够好)。
如果您不介意使用第三方软件,请使用html2text
diff <(html2text before.html) <(html2text after.html)

PS: 有两个不同的程序被称为 html2text


谢谢!html2text看起来很完美,但在OS X上无法编译。明天我会在我的Raspi上尝试并回报结果。 - James_M
1
这里有一个 homebrew 公式 here,所以你可以通过 homebrew 安装它,或者自己应用公式中引用的补丁并尝试重新编译。看起来应该可以工作! - Adrian Frühwirth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接