我有一个 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
。