免费注册 查看新帖 |

Chinaunix

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

[文本处理] 如何替换指定区域的指定字符串 [复制链接]

论坛徽章:
0
发表于 2015-06-28 17:02 |显示全部楼层
刚刚接触shell,有一个问题请教各位大神。
比如:
<source name="aaa">
<parameter free="0" max="10000" min="0.0001" name="Prefactor" scale="1e-12" value="3.616513122"/>
<parameter free="0" max="10" min="0" name="Index" scale="-1" value="2.55996"/>
<parameter free="0" max="500000" min="30" name="Scale" scale="1" value="648.478027"/>
<source name="bbb">
<parameter free="0" max="10000" min="0.0001" name="Prefactor" scale="1e-12" value="2.327612278" />
<parameter free="0" max="10" min="0" name="Index" scale="-1" value="2.4095" />
<parameter free="0" max="500000" min="30" name="Scale" scale="1" value="915.795898" />
<source name="ccc">
<parameter free="0" max="10000" min="0.0001" name="Prefactor" scale="1e-14" value="1.119141435" />
<parameter free="0" max="10" min="0" name="Index" scale="-1" value="1.99974" />
<parameter free="0" max="500000" min="30" name="Scale" scale="1" value="5288.33252" />
我想把source name="bbb"下面的max="10000"换成max="12345"该如何实现?
谢谢各位啦!!!

论坛徽章:
30
申猴
日期:2014-04-10 09:43:532015年亚洲杯纪念徽章
日期:2015-03-20 14:40:232015亚冠之阿尔纳斯尔
日期:2015-06-02 18:59:042015亚冠之阿尔希拉尔
日期:2015-06-30 15:22:572015亚冠之大阪钢巴
日期:2015-07-20 10:44:332015亚冠之阿尔纳斯尔
日期:2015-10-28 14:57:5215-16赛季CBA联赛之新疆
日期:2015-12-25 10:18:45黑曼巴
日期:2016-06-26 21:39:5315-16赛季CBA联赛之山西
日期:2016-07-25 21:54:2715-16赛季CBA联赛之北京
日期:2016-10-27 12:07:2315-16赛季CBA联赛之八一
日期:2017-07-07 16:39:0915-16赛季CBA联赛之吉林
日期:2017-09-04 12:14:43
发表于 2015-06-28 17:21 |显示全部楼层
本帖最后由 zxy877298415 于 2015-06-28 18:11 编辑
  1. awk -v RS="<source name" 'NR>1{if($1~/bbb/)  sub(/max=\"10000\"/,"max=\"12345\"");printf t $0}{t=RT}' file
复制代码
回复 1# lunaest


   

论坛徽章:
0
发表于 2015-06-28 17:59 |显示全部楼层
回复 2# zxy877298415


    好像不可以诶,而且在实际情况下source name="bbb"的里面不光有max=10000,还有别的参数也是10000,怎么指定只改max=后面的呢?

论坛徽章:
768
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
发表于 2015-06-28 18:06 |显示全部楼层
回复 1# lunaest
sed 's/max=\"10000\"/max=\"12345\"/' urfile
如果需要直接修改源文件加-i.

   

论坛徽章:
0
发表于 2015-06-28 18:51 |显示全部楼层
回复 4# Herowinter


    这个不是把文件里所有的10000都给替换了吗?有没有办法只替换名字为bbb下面的

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
发表于 2015-06-28 18:57 |显示全部楼层
本帖最后由 haooooaaa 于 2015-06-28 19:11 编辑
  1. awk '/ccc/{p=0}{if(p){gsub(/max=\"10000\"/,"max=\"12345\"");print}else{print}}/bbb/{p=1}' 2.txt
复制代码
  1. awk '/bbb/{print;getline;gsub(/max=\"10000\"/,"max=\"12345\"")}1' 2.txt
复制代码

论坛徽章:
768
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
发表于 2015-06-28 19:14 |显示全部楼层
回复 5# lunaest

sed '/source name=\"bbb\"/{:1;N;s/max=\"10000\"/max=\"12345\"/;T1}' urfile
   

论坛徽章:
0
发表于 2015-06-28 21:27 |显示全部楼层
sed  '/source name="bbb"/{n;s#max="10000"#max="12345"#}'

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2015-06-29 08:37 |显示全部楼层
回复 1# lunaest

$ awk 'match($0,/<source name="([^"]+)/,a){src=a[1]}src=="bbb"{sub(/max="10000"/,"max=\"12345\"")}1' FILE
<source name="aaa">
<parameter free="0" max="10000" min="0.0001" name="Prefactor" scale="1e-12" value="3.616513122"/>
<parameter free="0" max="10" min="0" name="Index" scale="-1" value="2.55996"/>
<parameter free="0" max="500000" min="30" name="Scale" scale="1" value="648.478027"/>
<source name="bbb">
<parameter free="0" max="12345" min="0.0001" name="Prefactor" scale="1e-12" value="2.327612278" />
<parameter free="0" max="10" min="0" name="Index" scale="-1" value="2.4095" />
<parameter free="0" max="500000" min="30" name="Scale" scale="1" value="915.795898" />
<source name="ccc">
<parameter free="0" max="10000" min="0.0001" name="Prefactor" scale="1e-14" value="1.119141435" />
<parameter free="0" max="10" min="0" name="Index" scale="-1" value="1.99974" />
<parameter free="0" max="500000" min="30" name="Scale" scale="1" value="5288.33252" />

   

论坛徽章:
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
发表于 2015-06-29 09:37 |显示全部楼层
  1. sed '/<source name="bbb">/{:1;n;/^<parameter /{s/max="10000"/max="12345"/;b1}}'
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP