我尝试使用这些努力来解析firefox书签(JSON导出版本):
cat boo.json | grep '\"uri\"\:\"^http\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}\"'
cat boo.json | grep '"uri"\:"^http\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}'
cat boo.json | grep '"uri"\:"^http\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}"'
其他很少但都失败了,json书签文件将如下所示:
.........."uri":"http://www.google.com/?"......"uri":"http://stackoverflow.com/"
所以,输出应该是这样的:
"uri":"http://www.google.com/?"
"uri":"http://stackoverflow.com/"
我的正则表达式缺少什么部分?
更新
在书签文件上的Url以这个特殊字符之一结尾:
/
,例如: "uri":"http://stackoverflow.com/"
"
,例如: "uri":"http://stackoverflow.com/questions/13148794/parsing-firefox-bookmarks-using-regular-expression"
}
,例如: "uri":"https://fr.add-ons.mozilla.com/fr/firefox/bookmarks/"}
使用此修改后的正则表达式:
$ egrep -o "(http|https)://([^ ]*).(*\/)" boo.json
结果:
http://fr.fxfeeds.mozilla.com/fr/firefox/headlines.xml"},{"name":"livemark/siteURI","flags":0,"expires":4,"mimeType":null,"type":3,"value":"http://www.lemonde.fr/"}],"type":"text/x-moz-place-container","children":[]}]},{"index":2,"title":"Tags","id":4,"parent":1,"dateAdded":1344432674984000,"lastModified":1344432674984000,"type":"text/
http://stackoverflow.com/questions/13148794/parsing-firefox-bookmarks-using-regular-expression","charset":"UTF-8"},{"index":29,"title":"adrusi/
http://stackoverflow.com/
...
但是这仍然不会让我只是网址。
答案 0 :(得分:0)
你试过JSON.sh吗?它的作品很棒!
答案 1 :(得分:0)
我使用此正则表达式提取网址,效果很好
cat *.html | grep -Eo "(http|https)://[a-zA-Z0-9./?=_-]*" | sort | uniq
答案 2 :(得分:-1)
Jeff Atwood先生发表了一篇文章the problem with urls,通过他提出的正则表达式,我设法从FireFox书签中提取所有网址:
egrep -o "\(?\bhttp://[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]" my-bookmark.json