从HTML标签内部获取文本而不知道所有属性

时间:2015-12-18 13:14:58

标签: regex bash grep

我试图通过此链接抓取在泊坞窗中心找到的所有存储库名称: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>

每个存储库的data-reactid始终不同。

我正在使用Bash,并希望grep包含class =&#34; RepositoryListItem__repoName ___ 3iIWs&#34;的每个div的div标签之间的文本。有人可以帮我构建一个正则表达式和命令链来在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。有人可以帮忙吗?谢谢!

1 个答案:

答案 0 :(得分:1)

我认为你应该使用类似的东西:

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 ></div>内的文字的组。

请注意我在使用RegEx和grep时非常新,所以可能会有一些聪明的东西,但这可以做你想要的。 \K标记会删除之前的所有匹配项,并且(?=)我会从匹配项中删除</div>部分。