一种获取xml文件某个节点内容的shell方法
配置文件
config.xml
<xml>
<server>
    <name>srv-01</name>
</server>
<server>
    <name>srv-02</name>
</server>
</xml>
问题
如何获取name为srv-01对应的server节点段落?
sed和awk的问题
sed和awk的正则表达式不支持非贪婪匹配
一种解决方法
- 原理
 
  根据cat -n config.xml获取行号,获得<name>srv-01</name>行号、<server>行号、</server>行号,距离name行号最近的两个server行号即为目标内容的开始和结束。
- 代码
 
name_num=$(cat -n config.xml | sed -n '/<name>srv-01<\/name>/p' | awk '{print $1}')
start_num=$(cat -n config.xml | sed -n '/<server>/p' | awk '{print $1}')
end_num=$(cat -n config.xml | sed -n '/<\/server>/p' | awk '{print $1}')
num_list="$start_num $name_num $end_num"
start_num=$(echo "$num_list" | tr ' ' '\n' | sort -nr | sed -n '/'"$name_num"'/,+1p' | tail -n 1)
end_num=$(echo "$num_list" | tr ' ' '\n' | sort -n | sed -n '/'"$name_num"'/,+1p' | tail -n 1)
server_content=$(sed -n ''"$start_num"','"$end_num"'p' config.xml)
echo "$server_content"
几点说明
- sed引用变量需要'"$var"'
 - echo "$var" 才能换行
 - sed只能//,+1获取下一行,不能获取上一行
 - tr '' '\n' 获得多行文本,便于排序
 
评价
有点呆的方法,一定有更好的。
一种获取xml文件某个节点内容的shell方法的更多相关文章
- VBScript Sample:遍历文件夹并获取XML文件中指定内容
		
案例: 我有一个文件夹,里面有很多子文件夹,每个子文件夹中都存在一个相同名字的XML文件,XML文件里面的标签结构相同,只是内容不同,XML文件中包含ID,Name等标签. 文件夹及文件结构如下图: ...
 - 读取xml文件中节点
		
/// <summary> /// /// </summary> /// <param name="xmlpath">节点路径</para ...
 - java操作xml文件--修改节点
		
上一篇文章我介绍了SAX方法解析XML文件的过程,这篇文章讲解的内容是利用DOM方法修改XML文件的节点内容. 下面依然是首先贴出XML文件: <?xml version ...
 - 使用GridView来获取xml文件数据
		
在任何一个系统中,数据的读取和编辑都是至关重要的.无论你是CS还是BS,都需要对数据进行操作.其实 我们可以发现,很多软件和系统最终都是对于数据库中数据的处理.之前在CS的学习过程中我们接触到了很多 ...
 - .net中读取xml文件中节点的所有属性信息
		
功能描述: 将数据以xml的格式记录成配置文件,需要获取配置文件中的数据时,则获取对应的配置文件,读取配置文件里对应节点的所有属性. 逻辑实现: 1.将数据配置好在xml文件中. 2.获取xml文件中 ...
 - Android开发之获取xml文件的输入流对象
		
介绍两种Android开发中获取xml文件的输入流对象 第一种:通过assets目录获取 1.首先是在Project下app/src/main目录下创建一个assets文件夹,将需要获取的xml文件放 ...
 - javascript读取xml文件读取节点数据的例子
		
分享下用javascript读取xml文件读取节点数据方法. 读取的节点数据,还有一种情况是读取节点属性数据. <head> <title></title> < ...
 - XML(php中获取xml文件的方式/ajax获取xml格式的响应数据的方式)
		
1.XML 格式规范: ① 必须有一个根元素 ② 不可有空格.不可以数字或.开头.大小写敏感 ③ 不可交叉嵌套 ④ 属性双引号(浏览器自动修正成双引号了) ⑤ 特殊符号要使用实体 ⑥ 注释和HTML一 ...
 - C#中常用的几种读取XML文件的方法
		
1.C#中常用的几种读取XML文件的方法:http://blog.csdn.net/tiemufeng1122/article/details/6723764/
 
随机推荐
- 【BZOJ2006】【NOI2010】超级钢琴(主席树,优先队列)
			
[BZOJ2006]超级钢琴(主席树,优先队列) 题面 BZOJ 题解 既然是一段区间 首先就要变成单点 所以求一个前缀和 这个时候贪心很明显了: 枚举每一个点和可以和它组成一段的可行的点 全部丢进一 ...
 - SenseTime Ace Coder Challenge 暨 商汤在线编程挑战赛 A. 地铁站
			
//其实比赛的时候就想到这方法了,但看到数据太吓人,就没写//看着标程,实际上就是这方法,太坑爹…… /* 假设值为k,对于图中任意两点,圆1半径k/t1,圆2半径k/t2 圆1与圆2的交集为可以设置 ...
 - STM32 ------  HardFault_Hander 中断函数
			
1.数组越界(对数组赋值) 正常情况,数组越界会进入 HardFault_Hander 中断函数的无线循环. 避免数组越界的一个方法是:每次使用数组前,检查要放入数据的数据长度是否大于数组长度,大于则 ...
 - 序列内第k小查询(线段树)
			
最近请教了一下大佬怎么求序列内第k大查询,自己又捣鼓了一下,虽然还没有懂得区间第k大查询,不过姑且做一个记录先吧 因为每个元素大小可能很大而元素之间不连续,所以我们先离散化处理一下,程序中的ori[ ...
 - 转:IOS:查找SDK路径和Framework头文件
			
通过Terminal进入Xcode.app所在目录,可以找到相应的SDK路径,相关 的Framework的头文件也在改目录下. 示例如下: Frameworks /Applications/xcode ...
 - linux下yum错误:[Errno 14] problem making ssl connection Trying other mirror.
			
今天是要yum命令安装EPEL仓库后 yum install epel-release 突然发现yum安装其他的软件出错. 错误:[Errno 14] problem making ssl conne ...
 - MySQL数据库应用 从入门到精通 学习笔记
			
以下内容是学习<MySQL数据库应用 从入门到精通>过程中总结的一些内容提要,供以后自己复现使用. 一:数据库查看所有数据库: SHOW DATABASES创建数据库: CREATE DA ...
 - redis连接池 jedis-2.9.0.jar+commons-pool2-2.4.2.jar
			
java使用Redis连接池 jar包为 jedis-2.9.0.jar+commons-pool2-2.4.2.jar jar下载地址 package com.test; import redis ...
 - bzoj千题计划140:bzoj4519: [Cqoi2016]不同的最小割
			
http://www.lydsy.com/JudgeOnline/problem.php?id=4519 最小割树 #include<queue> #include<cstdio&g ...
 - 拟牛顿法/Quasi-Newton,DFP算法/Davidon-Fletcher-Powell,及BFGS算法/Broyden-Fletcher-Goldfarb-Shanno
			
拟牛顿法/Quasi-Newton,DFP算法/Davidon-Fletcher-Powell,及BFGS算法/Broyden-Fletcher-Goldfarb-Shanno 转载须注明出处:htt ...