Grep 和 Regex:过滤文件中的子域名

Grep 和 Regex:过滤文件中的子域名

首先抱歉,我应该学习一些 grep 和 regex,而不是问这个问题,但我现在时间有点紧。而且我最终肯定会学习 egrep。

因此这里是输入:

202.125.132.76          host    av.google.com
202.147.187.10          host    cms1web.google.com
202.147.187.10          host    cms2web.google.com
    "autodiscover.google.com
    "cms1web.google.com
    "cms2web.google.com
    "dialin.google.com
 - afghanistan.google.com
  - autodiscover.google.com
  - bangladesh.google.com
  - bdbkashonline.google.com
  - cms1web.google.com
*.google.com
*.ibank.google.com
*.ibankintl.google.com
*.itrade.google.com
202.125.133.232 403     host    autodiscover.google.com
104.40.82.191 - EnterpriseEnrollment.google.com
107.154.104.16 - iTrade.google.com
107.154.108.2 - MIS.google.com
116.71.129.169  testpaymentapi.google.com
119.159.231.12          host    av.google.com

输出应该是

av.google.com
cms1web.google.com
cms2web.google.com
autodiscover.google.com
so on.......

我只想要 *.*google.com 而不是结果中的任何其他内容,逐行

我根本不想要撇号和连字符,只想要如上所示的子域名。

如果你能帮助我,我将非常感谢 :)

答案1

$ grep -Po '^[^-*"]*?\K[[:alnum:]-]+\.google\.com$' input
av.google.com
cms1web.google.com
cms2web.google.com
autodiscover.google.com
testpaymentapi.google.com
av.google.com
  • -非贪婪匹配并丢弃不包括、*或 的字符序列"

然后

  • 匹配并输出一系列字母数字字符和连字符(尽管您的输入没有任何字符,但它们在域名中是合法的),然后是.google.com

答案2

要解决这样的任务,您需要设想清晰明确的逻辑规则。根据您的示例输出,您需要获取由以下内容组成的字符串:

  • 三个词,
  • 除以二,
  • 第一个单词可以包含字母和数字,
  • 其余两个单词仅包含字母,
  • 所有字母都应小写。

如果上述内容正确,您可以通过以下命令组合来实现所需的输出sedgrep

sed -e '/[A-Z]/d' -e '/*/d' input.txt | grep -oP '[a-z0-9]+\.[a-z]+\.[a-z]+'

解释:

  • 第一个表达式(-e)将在读取文件时删除d所有包含大写字母的行,第二个表达式将在读取文件*时删除所有包含通配符的行。sedinput.txt
  • 命令的输出sed通过管道传输|grep
  • 意志-o的选择grep仅显示与 PATTERN 匹配的行的部分-P告诉我们PATTERN 是 Perl 正则表达式. 在 PATTERN 中[a-z0-9]+意味着我们需要匹配一个包含数字或/和小写字母的单词,并且必须至少有一个字符+;\.代表文字点,因为.具有任何字符的含义,只要它不被反斜杠转义\

根据问题中提供的输入,示例输出(请注意,此处的输出已排序并且仅打印唯一值):

$ sed -e '/[A-Z]/d' -e '/*/d' input.txt | grep -oP '[a-z0-9]+\.[a-z]+\.[a-z]+' | sort -u
afghanistan.google.com
autodiscover.google.com
av.google.com
bangladesh.google.com
bdbkashonline.google.com
cms1web.google.com
cms2web.google.com
dialin.google.com
testpaymentapi.google.com

答案3

[a-z0-9]+\.[a-z]+\.*[a-z]+

此表达式为您选择:任何类型的域和子域。还推荐这个带有正则表达式测试和调试的网站:[1]:https://regex101.com/

相关内容