![删除两行之间的 wayback 工具栏代码](https://linux22.com/image/1472139/%E5%88%A0%E9%99%A4%E4%B8%A4%E8%A1%8C%E4%B9%8B%E9%97%B4%E7%9A%84%20wayback%20%E5%B7%A5%E5%85%B7%E6%A0%8F%E4%BB%A3%E7%A0%81.png)
我正在尝试使用 find 和 xargs 以及 grep 和 sed 等工具删除 Wayback 工具栏代码
问题是 html 和 php 文件的大小超过 7GB,页面数量也超过(300 万页),我想对所有以 Wayback 工具栏开头的页面执行此操作,这些页面是从 web.archive.org 下载的。wayback 工具栏代码的开头和结尾都以
<!-- BEGIN WAYBACK TOOLBAR INSERT -->
Wayback tooldbar code
bla bla bla
<!-- END WAYBACK TOOLBAR INSERT -->
但没有按行排序。因此,我尝试使用以下命令
find . -type f -name '*.php*' | xargs -I {} grep -l '<!-- BEGIN WAYBACK TOOLBAR INSERT -->' '{}'
我可以捕获那些包含工具栏的文件
但我一直困惑于如何删除 <start 和 end> 之间的代码
答案1
您将需要使用 sed 来删除这些内容:
find ... -print0 |
xargs -0 sed -i '/BEGIN WAYBACK TOOLBAR INSERT/,/END WAYBACK TOOLBAR INSERT/d'
答案2
id_
您可以通过在 URL 中附加快照日期/时间从 Wayback Machine 检索未修改的 HTML 文档副本。
例如:
使用工具栏:https://web.archive.org/web/20180101010338/http://www.example.com:80/
原始原文:https://web.archive.org/web/20180101010338id_/http://www.example.com:80/
答案3
在 macOS 上:
find ./ -type f -exec sed -i '' -e '/BEGIN WAYBACK TOOLBAR INSERT/,/END WAYBACK TOOLBAR INSERT/d' {} \;
macOS 特别需要将一个空字符串作为参数传递给 -i,因为它们使用的是 BSD 版本的 find,而不是 Linux 上的 GNU 版本,因此存在一些差异。我现在找不到关于它的 stackoverflow 帖子,但我确信可以搜索到。