如何从下面输入的文本中提取域名?我试过了,但它没有像预期的那样工作:
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
发布于 2021-04-08 10:57:07
感谢谷歌,我找到了很多解决方案,尝试制作我自己的正则表达式,
^((http[s]?|ftp):\/)?\/?([^:\/\s]+)((\/\w+)*\/)([\w\-\.]+[^#?\s]+)(.*)?(#[\w\-]+)?$
[a-zA-Z0-9-]+\.[a-zA-Z]+($|(?=\/))
awk -F"." '{print $(NF-1)"."$NF}'
发布于 2021-04-08 12:49:11
看起来您不仅试图删除/,实际上还试图从这些URL中提取主域。
如果您将输入放在一个名为input.txt的文件中,则以下内容适用于我在Ubuntu20.10上的操作:
cat input.txt | sed -e 's;..(a-zA-Z0-9-.a-zA-Z0-9-).$;\1;‘
简单解释一下:域名的parts(点之间的单词)只能使用数字、字母和破折号作为字符。该模式可以表示为: a-zA-Z0-9-*
上面的正则表达式将匹配其中的两个,由一个点分隔,前面是一个点(可能还有一些字符),后面是行尾或不属于前面组的一组字符。我相信.*的贪婪本质将确保只捕获主域。
可能还有更健壮的解决方案可用。
https://stackoverflow.com/questions/66996629
复制相似问题