在 bash 脚本变量上使用 sed/awk

在 bash 脚本变量上使用 sed/awk

我正在尝试获取 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。

相关内容