我正在尝试获取 DNS 服务器的名称4.2.2.1
。
使用host 4.2.2.1
我得到这个输出:
1.2.2.4.in-addr.arpa domain name pointer a.resolvers.level3.net
在我的脚本中,我这样做:
name="$($host $server)"
我怎样才能使用 sed/awk 来$name
只获取a.resolvers.level3.net
,请记住我将在完全不同的服务器上使用它,所以我不能只是grep a.resolvers
摆脱变量?
答案1
另一种选择是对字符串进行切片:
echo ${name##* }
这将分割字符串并保留从最后一个空格到末尾的部分。
${name <-- from name
## <-- trim the front
* <-- matches anything
' ' <-- until the last ' '
}
答案2
最简单的方法是使用awk
并告诉它打印最后一个字段:
$ echo "$name" | awk '{print $NF}'
a.resolvers.level3.net
当然,如果你只需要服务器的IP,你也可以先把它输入进去,name
这样以后就不需要处理它了:
name=$(host $server | awk '{print $NF}')
答案3
name=$(host "$server" | grep -o '[^[:space:]]*$')
将选择主机命令输出的尾部部分。
答案4
一个更短的答案,根本不涉及字符串操作,是
dig +short -x 4.2.2.1
显示
a.resolvers.level3.net.
仅此而已。当然你必须安装dig。