从 nginx 服务器文件中获取 grep,但排除 www.domain.tld

从 nginx 服务器文件中获取 grep,但排除 www.domain.tld

我在这样的 bash 脚本中有一个命令,可以获取我的网络服务器上所有域的数组。

domains=($(grep -rnw '/etc/nginx/sites-available/' -e 'server_name' -l | xargs grep -e 'server_name' | awk '{print $3}'))

nginx 服务器文件的格式为服务器名称行,以制表符作为前缀,然后server_name domain.tld;

这很有效,我得到了一个仅包含域名的列表,但前提是服务器名称行中未定义 www. 前缀。在这种情况下,服务器名称行将看起来像server_name www.domain.tld domain.tld;server_name domain.tld www.domain.tld;,两种方式都可以接受。

问:如果定义了 www. 前缀,我会返回顺序中第一个部分。有没有办法可以忽略www.domain.tld结果中的该部分,只返回domain.tld

答案1

使用 GNUsed你可以尝试这个:

domains=$(grep -rwn "/etc/nginx/sites-available/" -e "server_name" | sed -E -e 's/ www\.\w+\.\w+//g')

printf "%s\n" "$domains"

相关内容