免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3495 | 回复: 13
打印 上一主题 下一主题

[文本处理] 这个xml用shell怎么处理,求高手指点 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-12 20:59 |只看该作者 |倒序浏览
xml 文件及处理要求如下:
  1. <root>
  2.     <pattern>
  3.         <A></A>
  4.         <B></B>
  5.         <C></C>
  6.     </pattern>
  7.    <pattern>
  8.         <A></A>
  9.         <B></B>
  10.         <C></C>
  11.     </pattern>
  12.     <pattern>
  13.         <C></C>      <!-- A,B,C顺序可能不一样 -->
  14.         <A></A>
  15.         <B></B>
  16.     </pattern>
  17.     <pattern>
  18.         <A></A>
  19.         <B></B>
  20.         <C>1.0</C>   <!-- 只转换那些A,B,C之间全为空的 -->
  21.     </pattern>
  22. </root>
复制代码
处理后:
  1. <root>
  2.     <pattern>
  3.         <A>0</A>
  4.         <B>0</B>
  5.         <C>0</C>
  6.     </pattern>
  7.    <pattern>
  8.         <A>0</A>
  9.         <B>0</B>
  10.         <C>0</C>
  11.     </pattern>
  12.     <pattern>
  13.         <C>0</C>   
  14.         <A>0</A>
  15.         <B>0</B>
  16.     </pattern>
  17.     <pattern>
  18.         <A></A>
  19.         <B></B>
  20.         <C>1.0</C>   
  21.     </pattern>
  22. </root>
复制代码

论坛徽章:
0
2 [报告]
发表于 2014-02-12 21:36 |只看该作者
  1. 替换 >< 为 >0<
复制代码

论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
3 [报告]
发表于 2014-02-12 23:02 |只看该作者
sed 's/></>0</'

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
4 [报告]
发表于 2014-02-13 00:04 |只看该作者
@零二年的夏天@elu_ligao
LZ的要求:
<!-- 只转换那些A,B,C之间全为空的 -->

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
5 [报告]
发表于 2014-02-13 00:19 |只看该作者
  1. awk -vRS='pattern' '!/>\S+</{gsub(/></,">0<")}{printf $0RS}'
复制代码
  1. sed -r '/<pattern>/{:1;N;/<\/pattern>/!b1;/>\S+</b;s/></>0</g}'
复制代码

论坛徽章:
0
6 [报告]
发表于 2014-02-13 08:35 |只看该作者
yestreenstars 发表于 2014-02-13 00:19

多谢大牛~

论坛徽章:
0
7 [报告]
发表于 2014-02-13 08:58 |只看该作者
yestreenstars 发表于 2014-02-13 00:19


sed的那个输出符合要求,awk的把最后一个pattern中的含有1.0的A,B处都改了,不是预期的;
sed中的,!b1;/>\S+</b这两句分别是什么意思,大侠能否说明下,谢谢:wink:
PS:求指导,shell新手,shell教程哪个比较好,想去买来看下

论坛徽章:
0
8 [报告]
发表于 2014-02-13 09:25 |只看该作者
本帖最后由 zjdick 于 2014-02-13 09:27 编辑

回复 7# gigglesun
b1等于goto 1
\S是正则表达式,非空格


   

论坛徽章:
6
摩羯座
日期:2013-12-27 09:45:04技术图书徽章
日期:2014-01-27 12:40:06辰龙
日期:2014-02-28 15:12:52巳蛇
日期:2014-03-21 17:06:27未羊
日期:2014-04-15 20:12:41黑曼巴
日期:2016-08-02 11:00:06
9 [报告]
发表于 2014-02-13 09:29 |只看该作者
回复 5# yestreenstars
此版本awk,不能正常运行
  1. awk -vRS='pattern' '!/>\S+</{gsub(/></,">0<")}{printf $0RS}'
复制代码
  1. awk --version
  2. GNU Awk 3.1.5
  3. Copyright (C) 1989, 1991-2005 Free Software Foundation.

  4. This program is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation; either version 2 of the License, or
  7. (at your option) any later version.

  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11. GNU General Public License for more details.

  12. You should have received a copy of the GNU General Public License
  13. along with this program; if not, write to the Free Software
  14. Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
复制代码
另外,最后多一个pattern

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
10 [报告]
发表于 2014-02-13 09:34 |只看该作者
回复 7# gigglesun

/<\/pattern>/!b1表示除了匹配到</pattern>不跳转到标签1所在之处,其他的都跳转。
/>\S+</b表示匹配到>和<之间含有非空白符时跳转到脚本的末尾。
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP