如何解析nmap输出xml文件?

时间:2011-10-27 10:26:18

标签: xml parsing awk

我有大约50个vlan的扫描结果,当我使用单个nmap命令扫描整个子网时很容易但是当解析/过滤资产信息(例如主机名,IP地址)时,它成为一个大问题。现在我必须打开每个xml文件(使用xml软件)并找到各个标签并提取所需的字段。

是否可以使用awk / grep等提取所需字段?

以下是xml文件的外观

<address addr="192.168.1.1" addrtype="ipv4" />
<hostnames><hostname name="test@myserver.com" type="PTR" /></hostnames>

我只对address addrhostname name

感兴趣

这是xml file

WoW chris你为我做了它现在完美无缺:D谢谢你。你是否知道如果标签位于不同的行上(不是在它开始时在同一行上结束),这个命令是否仍然可用?

<address addr="192.168.1.1" addrtype="ipv4" />
<hostnames><hostname name="test@myserver.com" type="PTR" />
</hostnames>

我同意,但我无法理解您对delimator的描述-F“\”“。​​熟食店\”不在xml文件中。我错过了什么

很抱歉,但我不明白这是什么'\'这个。这是指起始引号“。感谢

感谢克里斯的帮助,以及非常快速和简单的方式。我现在如何接受你的回答?

3 个答案:

答案 0 :(得分:0)

更新的回答:是的,只要引号内的部分没有跨行分割,下面的代码就可以了。

一点解释: Awk将其输入分为fiels。 &lt; -F“\”“&gt;告诉awk将输入字符串拆分为双引号。然后将输入字符串中的每个拆分字段分配给变量$ 1 .. $ NF,其中NF代表字段数。如果您对双引号后的第一个字段感兴趣,那么第二个字段为$ 2.

尝试:

$ cat file

<address addr="192.168.1.1" addrtype="ipv4" />
<hostnames><hostname name="test@myserver.com" type="PTR" /></hostnames>

命令:

awk -F"\"" '/<address|<hostnames/{print $2}' file

输出:

192.168.1.1
test@myserver.com

HTH Chris

答案 1 :(得分:0)

awk -F '="|"' '{for (i=1;i<=NF;i++){ if($i~" addr$" && i+1<=NF)print $(i+1); if($i~"hostname name")print $(i+1)} }' yourXml

如果addr="192.168.1.1"name="test@myserver.com"没有被换行符破坏,这应该有效。两者也可以在同一条线上。

答案 2 :(得分:0)

如果您需要经常操作 xml ,可以安装 XML Gawk

xgawk -lxml 'XMLSTARTELEM == "address" {
  print XMLATTR["addr"]
  }
XMLSTARTELEM == "hostname" {
  print XMLATTR["name"]
  }' infile 

您需要删除 XML 开头的空行 为了正确处理文件。