我在这样的 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"