免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: letunix
打印 上一主题 下一主题

[文本处理] 如何通过 sed 来判断节点, 并删除节点根? [复制链接]

论坛徽章:
0
21 [报告]
发表于 2013-03-09 15:04 |只看该作者
本帖最后由 letunix 于 2013-03-09 15:06 编辑

回复 20# yestreenstars


<dict>
    <key>abc</key>
    <string>xxx</string>
</dict>

<dict>
    <key>abc</key>
    <string>xxx</string>
    <dict>
        <string>eee</string>
    </dict>
</dict>

<dict>
    <key>abc</key>
    <string>xxx</string>
    <array>
        <string>eee</string>
    </array>
</dict>



以上三种就是有可能出现的格式.

检索出带有 <string>xxx</string> 的 <dict> 然后把它从 <dict> 删到 </dict>

论坛徽章:
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
22 [报告]
发表于 2013-03-09 15:11 |只看该作者
回复 21# letunix
  1. sed '/^<dict>$/{:1;N;/\n<\/dict>$/!b1;/<string>xxx<\/string>/d}'
复制代码

论坛徽章:
0
23 [报告]
发表于 2013-03-09 16:12 |只看该作者
回复 22# yestreenstars


    还是不行...

<dict>
    <key>abc</key>
    <string>xxx</string>
</dict>

<dict>
    <key>abc</key>
    <string>xxx</string>
    <dict>
        <string>eee</string>
    </dict>
</dict>

<dict>
    <key>abc</key>
    <string>xxx</string>
    <array>
        <string>eee</string>
    </array>
</dict>


<dict>
    <key>abc</key>
    <string>ccc</string>
    <array>
        <string>eee</string>
    </array>
</dict>

<dict>
    <key>abc</key>
    <string>ccc</string>
</dict>

判断 红色区域, 为真, 则删除整块绿色区域. 输出结果为:

<dict>
    <key>abc</key>
    <string>ccc</string>
    <array>
        <string>eee</string>
    </array>
</dict>

<dict>
    <key>abc</key>
    <string>ccc</string>
</dict>

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
24 [报告]
发表于 2013-03-09 16:23 |只看该作者
@letunix
<dict>
    <key>abc</key>
    <string>ccc</string>
    <dict>
        <string>xxx</string>
    </dict>

</dict>

如果是如上情况是删除红色的<dict>?还是删除整个<dict>
   

论坛徽章:
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
25 [报告]
发表于 2013-03-09 16:28 |只看该作者
回复 23# letunix


    哪里不行了?
  1. [root@localhost ~]# cat i
  2. <dict>
  3.     <key>abc</key>
  4.     <string>xxx</string>
  5. </dict>

  6. <dict>
  7.     <key>abc</key>
  8.     <string>xxx</string>
  9.     <dict>
  10.         <string>eee</string>
  11.     </dict>
  12. </dict>

  13. <dict>
  14.     <key>abc</key>
  15.     <string>xxx</string>
  16.     <array>
  17.         <string>eee</string>
  18.     </array>
  19. </dict>

  20. <dict>
  21.     <key>abc</key>
  22.     <string>ccc</string>
  23.     <array>
  24.         <string>eee</string>
  25.     </array>
  26. </dict>

  27. <dict>
  28.     <key>abc</key>
  29.     <string>ccc</string>
  30. </dict>
  31. [root@localhost ~]# sed '/^<dict>$/{:1;N;/\n<\/dict>$/!b1;/<string>xxx<\/string>/d}' i



  32. <dict>
  33.     <key>abc</key>
  34.     <string>ccc</string>
  35.     <array>
  36.         <string>eee</string>
  37.     </array>
  38. </dict>

  39. <dict>
  40.     <key>abc</key>
  41.     <string>ccc</string>
  42. </dict>
  43. [root@localhost ~]#
复制代码

论坛徽章:
0
26 [报告]
发表于 2013-03-09 16:32 |只看该作者
回复 24# cao627


    不予以考虑…就算有也是删除整个!

论坛徽章:
0
27 [报告]
发表于 2013-03-09 16:33 |只看该作者
回复 24# cao627


    整个

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
28 [报告]
发表于 2013-03-09 16:38 |只看该作者
回复 27# letunix
那么22楼的脚本是对的,但要确保你的文本中所有的根<dict>是每行的开头

   

论坛徽章:
0
29 [报告]
发表于 2013-03-09 16:45 |只看该作者
回复 25# yestreenstars


    我在试试...可能是哪弄错了...

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
30 [报告]
发表于 2013-03-09 16:51 |只看该作者
本帖最后由 cao627 于 2013-03-09 16:51 编辑

回复 29# letunix
22楼脚本成功的条件是:你的根<dict>和根</dict>,在每行前后都没有空白。并且根<dict>中的子<dict>和子</dict>必须要有缩进。


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP