免费注册 查看新帖 |

Chinaunix

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

[文本处理] 怎么使用sed脚本修改xml配置文件? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-16 12:47 |只看该作者 |倒序浏览
配置文件:test.txt

<?xml version="1.0" encoding="utf-8"?>

<favorites xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher">
     <appwidget
        launcher:className="com.mediatek.clockwidget.ClockAppWidgetProvider"
        launcher:screen="3"
        launcher:spanY="2" />
      <appwidget
        launcher:className="com.android.quicksearchbox.SearchWidgetProvider"
        launcher:screen="3"
        launcher:spanY="1" />
     <favorite
        launcher:className="com.android.browser.BrowserActivity"
        launcher:screen="3"
        launcher:y="3" />
        <favorite
        launcher:className="com.sec.chaton.HomeActivity"
        launcher:screen="3"
        launcher:y="3" />
     <appwidget
        launcher:className="com.mediatek.videoplayer.VideoWidgetProvider"
        launcher:screen="4"
        launcher:spanY="2" />
      <appwidget
        launcher:className="com.android.music.MediaAppWidgetProvider"
        launcher:screen="4"
        launcher:spanY="2" />
</favorites>
需要在脚本中找到指定的className 如:com.sec.chaton.HomeActivity,修改其所在段的launcher:y属性;
之前是现学修改单行文本,搞个这种不知道怎么处理了;哪位大侠帮忙分析一下怎么处理

论坛徽章:
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
2 [报告]
发表于 2013-03-16 22:19 |只看该作者
回复 1# rabbitkn

想到个不是很严谨的
  1. sed  '/className="com.sec.chaton.HomeActivity"/{:a;n;s/\(launcher:y=\).* /\1xxx /;tb;ba;:b}' test.txt
复制代码
xxx为要修改的launcher:y属性

论坛徽章:
0
3 [报告]
发表于 2013-03-17 08:17 |只看该作者
可以试试下面的命令:
  1. sed '/^[[:space:]]*launcher:className="com.sec.chaton.HomeActivity"$/{n;n;s/launcher:y="[^"]*"/launcher:y="XX"/}'  test.xml
复制代码
大概解释下:首先是匹配launcher:className=="com.sec.chaton.HomeActivity" ,不知道这行前有没有空格或制表符所以加上了[[:space:]]
然后{n;n;s/launcher:y="[^"]*"/launcher:y="XX"/}      ,n为将匹配行的下一行加入到模式空间,所以加上了两个n,直接到匹配行的第二行,s替换不多说了,要说明下"[^"]"这个:只是要确保"值",这个值没有",但如果楼主觉得没必要判断,那也没什么必要,直接y=.* /> 就好了。但如果我们要修改这个值,我觉得判断一下准确些

论坛徽章:
0
4 [报告]
发表于 2013-03-17 14:48 |只看该作者
sed 是流编辑器,从网上找网站或论坛学习一下就可以做一些简单的操作了,你的应该是字串替换

论坛徽章:
0
5 [报告]
发表于 2013-03-23 13:34 |只看该作者
多谢,解释也很清楚,已完成功能要求;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP