当前位置: 首页 > Linux

Linux外壳-解析xml节点

时间:2023-04-06 06:20:51 Linux

01xml文件的值#user.xmlToymanline5xml节点是一个空节点,这是一种特殊的格式。02多条命令解析xml节点多条命令和管道符也可以用来解析xml节点,方法如下:[~]$catuser.xml|grep名称|sed's/^.*<名称>//g'|sed's/<\/name>.*$//g'玩具[~]$catuser.xml|grep名称|sed's/^.*<性别>//g'|sed's/<\/sex>.*$//g'[~]$catuser.xml|grep房间|sed's/^.*<房间>//g'|sed's/<\/room>.*$//g'上面的方法无法解析这种特殊格式的xml节点,虽然可以解析xml节点的值在正常格式中有多个命令和管道符,但是管道符太多会降低执行效率。因为管道符号会为连接的命令生成子进程,从而增加CPU开销。03一行awk命令解析xml节点awk命令解析所有特殊xml节点的值,只需要一行:[~]$awk'/<\/*name\/*>/{gsub(/[[:space:]]*<\/*name\/*>/,"");print$0}'user.xmlToy[~]$awk'/<\/*sex\/*>/{gsub(/[[:space:]]*<\/*sex\/*>/,"");print$0}'user.xmlman[~]$awk'/<\/*room\/*>/{gsub(/[[:space:]]*<\/*room\/*>/,"");print$0}'user.xml[~]$上面的awk方法兼容所有特殊的xml节点,只需要一个命令就可以解析出xml的值。简单解释一下下面命令的含义:awk'/matchedstring/{print$0}'表示在文本中,找到匹配字符串所在的行记录,可以替换grep"matchedstring"gsub(/matchedcharacterstring/,"")是awk的内部函数,意思是将匹配到的字符串替换为"",即替换为空字符串,可以替换sed's/matchedstring//g'中的*是正则表达式,*表示0个或多个字符可以重复,所以可以间接表示等.[[:space:]]表示匹配空格、制表等空白字符,[[:space:]]*表示匹配0个或多个空白字符$0表示取record的所有记录所以,awk命令解析xml节点总结如下:awk'/<\/*节点名\/*>/{gsub(/[[:space:]]*<\/*节点名\/*>/,"");print$0}'xmlfile04总结当我们写脚本需要解析文本文件时,尽量避免使用多个命令和管道符号来解析,因为使用管道符号会产生子进程,会增加CPU开销。大多数情况下,只需要一条awk命令就可以完成解析工作,比多条命令和管道符号的方式效率更高,CPU开销小。通过以上两个解析xml节点的案例,我们可以得出结论:awk'/matchedstring/{print$0}'可以代替grep"matchedstring"awk'{gsub(/matchedstring/,"");print$0}'可以替换sed's/matchedstring/""/g'awk'/matchedstring/{gsub(/matchedstring/,"");print$0}'可以替换cat|grep“匹配的字符串”|sed's/匹配的字符串/""/g'