如何使用grep来匹配域名?

如何使用grep来匹配域名?

我有一个 URL 列表,例如:

hxxp://url.com/subpage.html
hxxp://www.url2.com/index.php
hxxp://subdomain.url3.com/somepage.php
...

如何使用 grep 仅匹配域名?

所有 URL 的域名后都有一个 /。而且有很多顶级域名,不确定有多少,列表相当大。

答案1

为了使用非贪婪正则表达式,grep您需要使用-P选项,并且-o选项仅输出匹配部分。您还需要使用环视,以便匹配的部分不包含在输出中。

grep -Po '.*?//\K.*?(?=/)'

例子:

$ echo 'hxxp://subdomain.url3.com/somepage.php' | grep -Po '.*?//\K.*?(?=/)'
subdomain.url3.com

答案2

有个地方可以测试你的正则表达式技能这里. 表达式应该看起来像

.*?//(.*)/

您需要循环遍历所有结果。在我给您的页面上,您可以输入此表达式和一个网址,然后它会显示匹配的内容。另外请记住,您只能在有限的时间内拥有捕获的变量。

答案3

如果域名后只有一个 TLD,那么这应该有效(我假设您想排除子域名):

[^\./]*\.[^\./]*/

虽然它仍然有尾随斜杠,但您可以直接通过管道将其传输出去sed

相关内容