Perl 域名的grep或sed模式匹配和子域的截断?

Perl 域名的grep或sed模式匹配和子域的截断?,perl,bash,sed,grep,Perl,Bash,Sed,Grep,我正在尝试使用grep从httrack数据流中提取域名列表。我有它接近工作,但结果也包括任何和所有子域 httrack --skeleton http://www.ilovefreestuff.com -V "cat \$0" | grep -iEo "([0-9,a-z\.-]+)\.(com)" 以下是我当前的示例结果: 域名1.com 域名2.com www.domain3.com subdomain.domain4.com 无论如何,域名5.com 下面是我想要的示例结果 域名1

我正在尝试使用grep从httrack数据流中提取域名列表。我有它接近工作,但结果也包括任何和所有子域

httrack --skeleton http://www.ilovefreestuff.com -V "cat \$0" | grep -iEo "([0-9,a-z\.-]+)\.(com)"
以下是我当前的示例结果:

  • 域名1.com
  • 域名2.com
  • www.domain3.com
  • subdomain.domain4.com
  • 无论如何,域名5.com
下面是我想要的示例结果

  • 域名1.com
  • 域名2.com
  • 域名3.com
  • 域名4.com
  • 域名5.com
有什么我可以添加到这个grep表达式中,或者我应该通过管道将它连接到一个新的sed表达式来截断任何子域吗?如果是这样,我如何完成这项任务?我卡住了。非常感谢您的帮助

问候,


Wyatt

您可以在
grep
模式中删除
。以下几点应该有效

httrack --skeleton http://www.ilovefreestuff.com -V "cat \$0" | 
grep -iEo '[[:alnum:]-]+\.(com|net|org)'

如果您只是想做一个
.com
,那么以下操作将起作用,因为它将删除带有或不带s的
HTTP://
以及下一个子域。正如你所看到的,它只适用于a.com

/(?:https?:\/\/[a-z09.]*?)([a-zA-Z0-9-]*\.com)/
示例数据集

http://www.ilovefreestuff.com/
https://test.ilovefreestuff.com/
https://test.sub.ilovefreestuff.com/


也就是说,使用
Regex
解析和/或验证域名通常是不好的做法,因为有大量的变体永远无法完全解释,例外情况是匹配和/或数据集的条件定义明确且不全面。这篇文章有更多关于这个过程的细节,并涵盖了更多的情况

这个代码有效!。。。如何将.net和.org添加到同一个命令行中?很好。非常感谢你。