我正在尝试通过以下链接爬网在Docker集线器中找到的所有存储库名称:https ://hub.docker.com/search/?q =*& page =1& isAutomated =0& isOfficial =1& pullCount =0& starCount =0
我感兴趣的HTML标签是:
<div class="RepositoryListItem__repoName___3iIWs" data-reactid=".s0zyncta0w.1.2.1.0.0.$4lexnz/overtime.0.0.1.0">4lexnz/overtime</div>
每个存储库的数据反应性总是不同的。
我正在使用Bash,并希望在每个包含class =“ RepositoryListItem__repoName ___ 3iIWs”的div的div标记之间添加文本。有人可以帮我构造一个regexp和命令链来用bash做到这一点吗?
到目前为止,我有:
content=$(curl -L 'https://hub.docker.com/search/?q=*&page=1&isAutomated=0&isOfficial=0&pullCount=0&starCount=0')
echo $content | grep -oP '(?<=<div class="RepositoryListItem__repoName___3iIWs").*?(?= </div>)'
但这根本不返回任何东西。$ content的值是正确的,因此这是最后的grep不能满足我的要求。有人可以帮忙吗?谢谢!
我认为您应该使用类似:
content=$(curl -L 'https://hub.docker.com/search/?q=*&page=1&isAutomated=0&isOfficial=0&pullCount=0&starCount=0')
echo $content | grep -oP '<div class="RepositoryListItem__repoName___3iIWs"\s(.)+?>(\K.+?)(?=<\/div>)'
对于我来说似乎很有效,这样您就可以提取出一个组,其中包含的确切位置是<div >
and中的文本</div>
。
请注意,将RegEx与grep结合使用是我的新手,所以可能有些聪明,但这可以满足您的需求。该\K
标记会删除之前的所有匹配项,并且(?=)
我会</div>
从匹配项中删除该部分。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句