【问题标题】:Remove anything before primary domain or after forward slash在主域之前或正斜杠之后删除任何内容
【发布时间】:2021-04-08 02:38:22
【问题描述】:

如何从下面的文本输入中提取域名?我试过了,但没有按预期工作:

grep -oP '(?<=[.])\w+(?=[.])'

是否可以在 sed/awk 或任何其他 Linux 命令中执行此操作?

输入:

netgear.com
myapi.arlo.com
https://updates.netgear.com/arlo
https://bugcrowd-pub.bounty.accellion.net
client-api.arkoselabs.com

所需的输出:

netgear.com
arlo.com
netgear.com
accellion.net
arkoselabs.com

【问题讨论】:

  • company.co.uk这样的国际域名呢?
  • 天哪,我错过了一些东西,我该如何处理。也许试图在正则表达式英国或其他东西中列出所有,.
  • 我认为这个主题太复杂了,无法通过单个正则表达式来处理,特别是在国家方面......您可能需要考虑使用 python,特别是 ltdextract module

标签: regex linux shell


【解决方案1】:

感谢 Google,我找到了这么多解决方案,尝试制作我自己的正则表达式,

^((http[s]?|ftp):\/)?\/?([^:\/\s]+)((\/\w+)*\/)([\w\-\.]+[^#?\s]+)(.*)?(#[\w\-]+)?$

[a-zA-Z0-9-]+\.[a-zA-Z]+($|(?=\/))

awk -F"." '{print $(NF-1)"."$NF}'

【讨论】:

  • 可能值得注意的是,只有中间的 [a-zA-Z0-9-]+\.[a-zA-Z]+($|(?=\/)) 可以满足您的要求...
  • 谢谢,上面有人问,如果我遇到这个网址,.subdomain.subdomain.company.co.uk/files
【解决方案2】:

看起来您不仅试图删除 /,实际上还试图从这些 URL 中提取主域。

如果您将输入放在一个名为 input.txt 的文件中,则以下内容在 Ubuntu 20.10 上适用于我:

猫输入.txt | sed -e 的;..([a-zA-Z0-9-].[a-zA-Z0-9-]).$;\1 ;'

简要说明: 域名“部分”(点之间的单词)只能使用数字、字母和破折号作为字符。该模式可以表示为: [a-zA-Z0-9-]*

上面的正则表达式将匹配其中的 2 个,以点分隔,以点开头(可能还有多个字符),然后是行尾或不属于前一个字符的一组字符团体。我相信 .* 的贪婪本性将确保只捕获主域。

可能还有更强大的解决方案可用。

【讨论】:

  • 你真的测试了吗? sed: -e expression #1, char 37: `s' 命令的 RHS 上的无效引用 \1
  • 我做了,但看起来我有错字。编辑并更正了命令
猜你喜欢
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
  • 2018-03-11
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
相关资源
最近更新 更多