过滤旧书签url列表以排除不再使用Vim服务的网站



我正在尝试学习更多关于Vim和Linux命令行;我正在做的项目是:

试图将浏览器的bookmarks.html导出转换为url的纯文本列表,仍然可以工作。


  1. 首先,我使用lynx -dump -listonly bookmarks.html > bookmarks将HTML格式化为纯文本:
1. https://example.com/vim-is-cool.html
2. https://example.com/index.html
  1. 使用Vim剥离数字和前导空格(:% s/.+ /)
  2. 使用Vim删除除顶级域(:%! cut -d'/' -f1,2,3)外的所有内容
  3. 使用Vim删除重复的:sort u
  4. 要测试其中一个链接,我会使用:
curl -I https://www.example.com | grep HTTP | sed 's/HTTP/1.1 //g'
200 OK

现在,我想:

  1. 通过相同的命令检查短url的短列表(我不确定如何迭代Vim缓冲区中的每一行相同的命令)
  2. 根据cURL是否为短URL获得200 OK来过滤包含所有完整URL的文件(这部分也超出了我的范围)
  3. 将剩余的工作完整url列表写入bookmarks4(最有可能的是我可以处理这个)

如果可能的话,我希望在不使用shell/bash脚本或离开Vim的情况下完成所有这些。

这可能适合您(所有使用bash的GNU实用程序):

lynx -dump -listonly bookmarks.html |
grep -o 'https?://[^/]*' |
sort -u |
parallel -k 'curl -I -m2 {} |& grep -q "HTTP/[0-9.]+ 200" && echo {}' >bookmarks4

使用lynx来格式化链接。

使用grep来格式化url。

使用sort对重复项进行排序和删除。

使用curl检查url,并使用grep检查其输出是否有200个回复。将满足要求的url输出到书签中。

输出原始url,例如:

lynx -dump -listonly bookmarks.html |
grep http |
parallel --rpl '{url} s:.*(https?.*):$1:' 
--rpl '{dom} s:.*(https?://[^/]*).*:$1:' 
'curl -m2 -I {dom} |& grep -q "HTTP/[0-9.]+ 200" && echo {url}' |
sort -u >bookmarks4

最新更新