免费注册 查看新帖 |

Chinaunix

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

[文本处理] 请问shell能不能对使用正则匹配到的某组内容进行替换 [复制链接]

论坛徽章:
780
金牛座
日期: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
11 [报告]
发表于 2014-07-01 14:34 |只看该作者
本帖最后由 Herowinter 于 2014-07-01 14:35 编辑

回复 10# yestreenstars 这样可以吧,不算分组,只是指定替换第n个匹配。
  1. echo "111:222:333:444:555:666:777:888:999:aaa:bbb:ccc"|sed -r 's/\w+/AAA/11'
  2. 111:222:333:444:555:666:777:888:999:aaa:AAA:ccc
复制代码

论坛徽章:
0
12 [报告]
发表于 2014-07-01 14:38 |只看该作者
回复 8# Herowinter


    我来举个更具体一点的例子吧。
  1. aaa:bbb=cccee=ddd=eee:fff-ggg|aaa:bbb=ccc=ddd=eee:fff-ggg|aaa:bbb=ccc=ddd=eee:fff-ggg|aaa:bbb=ccc=ddd=eee:fff-ggg|aaa:bbb=cccdd=ddd=eee:fff-ggg|aaa:bbb=ccc=ddd=eee:fff-gggaaa:bbb=ccc=ddd=eee:fff-ggg|aaa:bbb=ccc=ddd=eee:fff-ggg|aaa:bbb=ccc=ddd=eee:fff-gggaaa:bbb=cccdd=ddd=eee:fff-ggg|aaa:bbb==ccc=ddd=eee:fff-ggg|aaa:bbb====ccc=ddd=eee:fff-gggaaa:bbb=ccc=ddd=eee:fff-ggg|aaa:bbb=ccc=ddd=eee:fff-ggg|aaa:bbbadsfaccc=adfddd=eee:fff-gggaaa:bbb=ccc=ddd=eee:fff-ggg|aaa:bbb=ccc=ddd=eee:fff-ggg|aaa:bbb=ccc=ddd=eee:fff-ggg
复制代码
把匹配到bbb和一个等号或多个等号与后面第一个=号之间的值的前面加上XXX

希望的结果是下面这样
aaa:bbb=XXXcccee=ddd=eee:fff-ggg|aaa:bbb=XXXccc=ddd=eee:fff-ggg|aaa:bbb=XXXccc=ddd=eee:fff-ggg|aaa:bbb=XXXccc=ddd=eee:fff-ggg|aaa:bbb=XXXcccdd=ddd=eee:fff-ggg|aaa:bbb=XXXccc=ddd=eee:fff-gggaaa:bbb=XXXccc=ddd=eee:fff-ggg|aaa:bbb=XXXccc=ddd=eee:fff-ggg|aaa:bbb=XXXc=ddd=eee:fff-gggaaa:bbb=XXXccdd=ddd=eee:fff-ggg|aaa:bbb==XXXccc=ddd=eee:fff-ggg|aaa:bbb====XXXccc=ddd=eee:fff-gggaaa:bbb=XXXccc=ddd=eee:fff-ggg|aaa:bbb=XXXcc=ddd=eee:fff-ggg|aaa:bbbadsfaccc=adfddd=eee:fff-gggaaa:bbb=XXXccc=ddd=eee:fff-ggg|aaa:bbb=XXXcc=ddd=eee:fff-ggg|aaa:bbb=XXXccc=ddd=eee:fff-ggg

论坛徽章:
0
13
发表于 2014-07-01 14:40
回复 11# Herowinter


    您 看下我12楼举的例子,还是得用正式匹配的复杂情况

论坛徽章:
0
14 [报告]
发表于 2014-07-01 14:40 |只看该作者
回复 10# yestreenstars


    您 看下我12楼举的例子,还是得用正式匹配的复杂情况

论坛徽章:
780
金牛座
日期: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
15 [报告]
发表于 2014-07-01 14:44 |只看该作者
回复 13# limaoyuan
没看懂问题的关键在哪里?这么做哪里错了?
  1. sed 's/bbb=/bbb=XXX/g' i
  2. aaa:bbb=XXXcccee=ddd=eee:fff-ggg|aaa:bbb=XXXccc=ddd=eee:fff-ggg|aaa:bbb=XXXccc=ddd=eee:fff-ggg|aaa:bbb=XXXccc=ddd=eee:fff-ggg|aaa:bbb=XXXcccdd=ddd=eee:fff-ggg|aaa:bbb=XXXccc=ddd=eee:fff-gggaaa:bbb=XXXccc=ddd=eee:fff-ggg|aaa:bbb=XXXccc=ddd=eee:fff-ggg|aaa:bbb=XXXccc=ddd=eee:fff-gggaaa:bbb=XXXcccdd=ddd=eee:fff-ggg|aaa:bbb=XXX=ccc=ddd=eee:fff-ggg|aaa:bbb=XXX===ccc=ddd=eee:fff-gggaaa:bbb=XXXccc=ddd=eee:fff-ggg|aaa:bbb=XXXccc=ddd=eee:fff-ggg|aaa:bbbadsfaccc=adfddd=eee:fff-gggaaa:bbb=XXXccc=ddd=eee:fff-ggg|aaa:bbb=XXXccc=ddd=eee:fff-ggg|aaa:bbb=XXXccc=ddd=eee:fff-ggg
复制代码

论坛徽章:
0
16 [报告]
发表于 2014-07-01 14:56 |只看该作者
本帖最后由 limaoyuan 于 2014-07-01 15:02 编辑

回复 15# Herowinter


    bbb==XXXccc

这种两个等号的应该你的替换完了是 bbb=XXX=cc ,期望的是 bbb==XXXcc只能用正则的方式想想,我实际工作中的遇到的例子更复杂的规则。

论坛徽章:
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
17 [报告]
发表于 2014-07-01 15:02 |只看该作者
本帖最后由 yestreenstars 于 2014-07-01 15:04 编辑

回复 11# Herowinter
我的意思是小括号捕获不支持9以上的分组,又没说没办法做~{:2_172:}

   

论坛徽章:
0
18 [报告]
发表于 2014-07-01 15:03 |只看该作者
回复 17# yestreenstars


    明白,能告诉我 2组的怎么替换吗?用正则指定匹配组的方式

论坛徽章:
780
金牛座
日期: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
19 [报告]
发表于 2014-07-01 15:05 |只看该作者
回复 16# limaoyuan
等号个数不是问题呀。
  1. sed -r 's/bbb=+/&XXX/g' i
  2. aaa:bbb==XXXcccee=ddd=eee:fff-ggg|aaa:bbb===XXXccc=ddd=eee:fff-ggg|aaa:bbb=XXXccc=ddd=eee:fff-ggg|aaa:bbb=XXXccc=ddd=eee:fff-ggg|aaa:bbb=XXXcccdd=ddd=eee:fff-ggg|aaa:bbb=XXXccc=ddd=eee:fff-gggaaa:bbb=XXXccc=ddd=eee:fff-ggg|aaa:bbb=XXXccc=ddd=eee:fff-ggg|aaa:bbb=XXXccc=ddd=eee:fff-gggaaa:bbb=XXXcccdd=ddd=eee:fff-ggg|aaa:bbb==XXXccc=ddd=eee:fff-ggg|aaa:bbb====XXXccc=ddd=eee:fff-gggaaa:bbb=XXXccc=ddd=eee:fff-ggg|aaa:bbb=XXXccc=ddd=eee:fff-ggg|aaa:bbbadsfaccc=adfddd=eee:fff-gggaaa:bbb=XXXccc=ddd=eee:fff-ggg|aaa:bbb=XXXccc=ddd=eee:fff-ggg|aaa:bbb=XXXccc=ddd=eee:fff-ggg
复制代码

论坛徽章:
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
20 [报告]
发表于 2014-07-01 15:06 |只看该作者
回复 12# limaoyuan
  1. sed -r 's/(bbb)=+/\1=XXX/'
复制代码
酱紫可以吗?
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP