免费注册 查看新帖 |

Chinaunix

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

请教一个文本处理的脚本,查找特定字符串并修改另一个文件 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-03-03 12:50 |只看该作者
原帖由 church1900 于 2009-3-3 12:29 发表
b.xml中的格式固定,开始2行文件内容为:


a.ini中内容格式为
#
#Mon Mar 02 15:33:25 CST 2009
ContainerVersion=V2.20
我希望把a.ini中ContainerVersion=后面的V2.20改为b.xml中version="V1.20.20"中 ...

  1. awk -F"=" 'NR==2{gsub("(\"|>)","",$NF);temp=$NF}NR>FNR{if($1=="ContainerVersion")gsub($2,temp);print}' b.xml a.ini
复制代码

[ 本帖最后由 cooljean2008 于 2009-3-3 12:51 编辑 ]

论坛徽章:
0
12 [报告]
发表于 2009-03-03 13:01 |只看该作者
sed "s/ContainerVersion=.*/ContainerVersion=$(awk -F'[\">]+' '/version="V/{print $(NF-1)}' b.xml)/" a.ini

论坛徽章:
0
13 [报告]
发表于 2009-03-03 13:08 |只看该作者
sed -ri 's/(Version=)(.*)/\1'`perl -e 'while(<>){s/.*="(.*)"\>/\1/;print if 2..2;}' b`'/' a

[ 本帖最后由 justlooks 于 2009-3-3 14:28 编辑 ]

论坛徽章:
0
14 [报告]
发表于 2009-03-03 13:29 |只看该作者
会什么会报sed : -e 表达式 #1,字符10 unterminated `s' command错误呢?

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
15 [报告]
发表于 2009-03-03 13:34 |只看该作者
原帖由 church1900 于 2009-3-3 13:29 发表
会什么会报sed : -e 表达式 #1,字符10 unterminated `s' command错误呢?

可能b文件有多个version。

我已经作了修改。

论坛徽章:
0
16 [报告]
发表于 2009-03-03 14:12 |只看该作者

回复 #15 blackold 的帖子

sed -n '2s指的是第二行是吧,修改后的不报错,但是找不到这个字符串,得到的结果是空的。

论坛徽章:
0
17 [报告]
发表于 2009-03-03 14:16 |只看该作者

回复 #16 church1900 的帖子

用我这个试一下,看呢
sed "s/ContainerVersion=.*/ContainerVersion=$(awk -F'[\">]+' '/version="V/{print $(NF-1)}' b.xml)/" a.ini

论坛徽章:
0
18 [报告]
发表于 2009-03-03 14:21 |只看该作者

回复 #17 我是DBA 的帖子

也是空的,xml文件中的第一行也有个version=,所以必须是取得第二行的这个值,不过和这个似乎无关,为什么取到的是空的呢

论坛徽章:
0
19 [报告]
发表于 2009-03-03 14:21 |只看该作者
答案有很多,用awk试试,答案在11楼

论坛徽章:
0
20 [报告]
发表于 2009-03-03 14:23 |只看该作者
[wuyc@S102015 shell]$ cat a.ini
#
#Mon Mar 02 15:33:25 CST 2009
ContainerVersion=V2.20
[wuyc@S102015 shell]$ cat b.xml
<?xml version="1.0" encoding="utf-8"?>
<root name="plat" i18n-file="setup-i18n.xml" label="SETUP_NAME" version="V1.20.20">
[wuyc@S102015 shell]$ awk 'BEGIN{FS="\""}NR==FNR{str=$8}NR>FNR,FS="="{if($2){$2=str} print $0}' b.xml a.ini
#
#Mon Mar 02 15:33:25 CST 2009
ContainerVersion V1.20.20
[wuyc@S102015 shell]$

注:NR==FNR b.xml,NR>FNR是a.ini,中间换了field分隔符FS.

[ 本帖最后由 FightingWu 于 2009-3-3 14:24 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP