我正在尝试学习更多关于Vim和Linux命令行;我正在做的项目是:
试图将浏览器的bookmarks.html
导出转换为url的纯文本列表,仍然可以工作。
- 首先,我使用
lynx -dump -listonly bookmarks.html > bookmarks
将HTML格式化为纯文本:
1. https://example.com/vim-is-cool.html
2. https://example.com/index.html
- 使用Vim剥离数字和前导空格(
:% s/.+ /
) - 使用Vim删除除顶级域(
:%! cut -d'/' -f1,2,3
)外的所有内容 - 使用Vim删除重复的
:sort u
- 要测试其中一个链接,我会使用:
curl -I https://www.example.com | grep HTTP | sed 's/HTTP/1.1 //g'
200 OK
现在,我想:
- 通过相同的命令检查短url的短列表(我不确定如何迭代Vim缓冲区中的每一行相同的命令)
- 根据cURL是否为短URL获得200 OK来过滤包含所有完整URL的文件(这部分也超出了我的范围)
- 将剩余的工作完整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