处理objects属性的最佳方法:bash中stdin中的值

处理objects属性的最佳方法:bash中stdin中的值,bash,scripting,sh,Bash,Scripting,Sh,你好 我启动nslookup someServer。我认为我得到了一个对象(如在权力地狱中),用空行分隔,而不是简单的STDUT。 $ nslookup someServer Server: 10.0.0.1 Address: 10.0.0.1#53 Name: someServer Address: 10.0.0.5 $ 如何获取同时具有属性名称和地址的对象 nslookup someServer | haveboth Name Address | wc -l 它是

你好

我启动
nslookup someServer
。我认为我得到了一个对象(如在权力地狱中),用空行分隔,而不是简单的STDUT。

$ nslookup someServer
Server:      10.0.0.1
Address:     10.0.0.1#53

Name: someServer
Address: 10.0.0.5

$
如何获取同时具有属性名称和地址的对象

nslookup someServer | haveboth Name Address | wc -l 

它是否存在于GNU实用程序中?

您是否只是在寻找一种方法来检查您的输出中是否有这两个值

然后,您可以在一行模式下使用perl(可能不是想象中最漂亮的解决方案,但可以实现您想要的功能,并且可以扩展以轻松检查更多内容)

这将遍历您的输出,统计
名称
地址
的出现次数,然后如果两者都超过零,则打印一条消息

如果以这种方式使用perl是一种可行的选择,那么我可以推荐这一页供以后阅读

编辑: 如果您想访问存储在
属性中的值:
,您可以使用

nslookup someServer | perl -F: -lane '$v{"NAME"} = $F[1] if /Name/; $v{"ADDRESS"} = $F[1] if /Address/; END{ print $v{"ADDRESS"}." ".$v{"NAME"} if exists $v{"ADDRESS"} && $v{"NAME"} }'
这将把
上的给定行拆分为字段分隔符,并将值存储在变量中,而不是简单的计数事件。注意,这样做只会存储最后一次发生的事件

nslookup someServer | perl -F: -lane '$v{"NAME"} = $F[1] if /Name/; $v{"ADDRESS"} = $F[1] if /Address/; END{ print $v{"ADDRESS"}." ".$v{"NAME"} if exists $v{"ADDRESS"} && $v{"NAME"} }'