首页  编辑  

shell如何提取xml中字段

Tags: /计算机文档/Linux & Unix/   Date Created:
来源: http://bbs.chinaunix.net/thread-4216848-1-1.html

[文本处理] shell如何提取xml中字段


  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <issues type="array">
  3.   <issue>
  4.     <id>4947</id>
  5.     <project name="你好" id="2"/>
  6.     <priority name="高优先级" id="4"/>
  7.     <assigned_to name="张三" id="1215"/>
  8.     <created_on>Thu Dec 24 16:33:00 +0800 2015</created_on>
  9.     <updated_on>Thu Dec 24 16:38:13 +0800 2015</updated_on>
  10.   </issue>

  11.   <issue>
  12.     <id>4948</id>
  13.     <project name="我好" id="2"/>
  14.     <priority name="低优先级" id="4"/>
  15.     <assigned_to name="李四" id="1215"/>
  16.     <created_on>Thu Dec 25 16:33:00 +0800 2015</created_on>
  17.     <updated_on>Thu Dec 25 16:38:13 +0800 2015</updated_on>
  18.   </issue>

  19.   <issue>
  20.     <id>4949</id>
  21.     <project name="大家好" id="2"/>
  22.     <priority name="高优先级" id="4"/>
  23.     <assigned_to name="王麻子" id="1215"/>
  24.     <created_on>Thu Dec 26 16:33:00 +0800 2015</created_on>
  25.     <updated_on>Thu Dec 26 16:38:13 +0800 2015</updated_on>
  26.   </issue>
  27. </issues>


比如:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <issues type="array">
  3.   <issue>
  4.     <id>4947</id>
  5.     <project name="你好" id="2"/>
  6.     <priority name="高优先级" id="4"/>
  7.     <assigned_to name="张三" id="1215"/>
  8.     <created_on>Thu Dec 24 16:33:00 +0800 2015</created_on>
  9.     <updated_on>Thu Dec 24 16:38:13 +0800 2015</updated_on>
  10.   </issue>

  11.   <issue>
  12.     <id>4948</id>
  13.     <project name="我好" id="2"/>
  14.     <priority name="低优先级" id="4"/>
  15.     <assigned_to name="李四" id="1215"/>
  16.     <created_on>Thu Dec 25 16:33:00 +0800 2015</created_on>
  17.     <updated_on>Thu Dec 25 16:38:13 +0800 2015</updated_on>
  18.   </issue>

  19.   <issue>
  20.     <id>4949</id>
  21.     <project name="大家好" id="2"/>
  22.     <priority name="高优先级" id="4"/>
  23.     <assigned_to name="王麻子" id="1215"/>
  24.     <created_on>Thu Dec 26 16:33:00 +0800 2015</created_on>
  25.     <updated_on>Thu Dec 26 16:38:13 +0800 2015</updated_on>
  26.   </issue>
  27. </issues>
复制代码
我期望提取出,如何实现呢:
  1. 4947        你好        张三
  2. 4948        我好        李四
  3. 4949        大家好        王麻子
复制代码
方法三: 
    xmlstarlet sel -t -m "//issue" -c "concat(./id/text(), '  ', ./project/@name, '  ', ./assigned_to/@name)" -n file.xml
方法二:
  1. sed -nr '/<issue>/,/<\/issue>/{H;//{x;s#.*<id>([^<]*).*<project name="([^"]*).*<assigned_to name="([^"]*).*#\1 \2 \3#p}}' file
  2. 4947 你好 张三
  3. 4948 我好 李四
  4. 4949 大家好 王麻子
复制代码


方法一: haooooaaa答复:
  1. awk -F'[<>"]' '/id>|project|assigned/{printf ++c%3 ? $3" " : $3"\n"}' b
  2. 4947 你好 张三
  3. 4948 我好 李四
  4. 4949 大家好 王麻子
复制代码