免费注册 查看新帖 |

Chinaunix

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

[文本处理] shell文本替换问题,欢迎应战 [复制链接]

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-09-03 06:20:00
21 [报告]
发表于 2015-08-31 21:16 |只看该作者
大虾, 这个脚本针对特定的这个能转换,但我多复制几个cbax ,cco1就不行了啊, 测试文本如下,我的实际情况是文件中有很多cbax 和cc01标识,也有可能有其他标识,这里我只是把问题简化了

(1,1,{1,1,cco1{-1,0, -1,1438081612000,70, 0, 0},cbax[{"OnPeakAccountID", 1800, 997699, 1970-01-01 07:00:00, 0}, {"FreeUnits", 1800, 997699, 1970-01-01 07:00:00, 0}],cbax[{"OnPeakAccountID", 1800, 997699, 1970-01-01 07:00:00, 0}, {"FreeUnits", 1800, 997699, 1970-01-01 07:00:00, 0}],cco1{-1,0, -1,1438081612000,70, 0, 0}})

回复 19# Herowinter


   

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-09-03 06:20:00
22 [报告]
发表于 2015-08-31 21:26 |只看该作者
华丽的分割线。。。。。。。。。。。。。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
23 [报告]
发表于 2015-08-31 22:17 |只看该作者
回复 21# bt21cnzy21st


    直接把你的真实数据拿出来吧,像这样挤牙膏似的一会一改需求算是怎么回事?

论坛徽章:
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
24 [报告]
发表于 2015-08-31 22:45 |只看该作者
本帖最后由 jason680 于 2015-08-31 22:45 编辑

回复 9# bt21cnzy21st

看起来是一样的问题...
解决方法也一样...

$ perl -pe '{s/cco1[{](.+?)[}]/$x=$1;$x=~y:,:|:;"cco1($x)"/ge;s/cbax\[(.+?)\]/$x=$1;$x=~y:{,}:(|):;"cbax[$x]"/ge}' FILE
(1,1,{1,1,cco1(-1|0| -1|1438081612000|70| 0| 0),cbax[("OnPeakAccountID"| 1800| 997699| 1970-01-01 07:00:00| 0)| ("FreeUnits"| 1800| 997699| 1970-01-01 07:00:00| 0)]})

$ perl -pe '{s/cco1[{](.+?)[}]/$x=$1;$x=~y:,:|:;"cco1($x)"/ge;s/cbax\[(.+?)\]/$x=$1;$x=~y:{,}:(|):;"cbax[$x]"/ge}' FILEx
(1,1,{1,1,cco1(-1|0| -1|1438081612000|70| 0| 0),cbax[("OnPeakAccountID"| 1800| 997699| 1970-01-01 07:00:00| 0)| ("FreeUnits"| 1800| 997699| 1970-01-01 07:00:00| 0)],cbax[("OnPeakAccountID"| 1800| 997699| 1970-01-01 07:00:00| 0)| ("FreeUnits"| 1800| 997699| 1970-01-01 07:00:00| 0)],cco1(-1|0| -1|1438081612000|70| 0| 0)})

   

论坛徽章:
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
25 [报告]
发表于 2015-08-31 23:01 |只看该作者
回复 21# bt21cnzy21st


希望这次可以了。。。

  1. awk '{while(match($0,/cco1\{[^}]*\}/) || match($0,/cbax\[\{[^]]*\]/)){s1=substr($0,1,RSTART-1);s2=substr($0,RSTART,RLENGTH);s3=substr($0,RSTART+RLENGTH);gsub(/{/,"(",s2);gsub(/}/,")",s2);gsub(/,/,"|",s2);$0=s1""s2""s3}}1' urfile

  2. (1,1,{1,1,cco1(-1|0| -1|1438081612000|70| 0| 0),cbax[("OnPeakAccountID"| 1800| 997699| 1970-01-01 07:00:00| 0)| ("FreeUnits"| 1800| 997699| 1970-01-01 07:00:00| 0)],cbax[("OnPeakAccountID"| 1800| 997699| 1970-01-01 07:00:00| 0)| ("FreeUnits"| 1800| 997699| 1970-01-01 07:00:00| 0)],cco1(-1|0| -1|1438081612000|70| 0| 0)})
复制代码

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-09-03 06:20:00
26 [报告]
发表于 2015-08-31 23:07 |只看该作者
十分感谢jason680, 明天我打算做个整体的测试,我会反馈结果的。

回复 24# jason680


   

论坛徽章:
6
处女座
日期:2014-04-02 16:07:17酉鸡
日期:2014-04-14 10:09:22子鼠
日期:2014-04-17 11:57:30辰龙
日期:2014-09-01 17:14:08戌狗
日期:2014-10-28 12:25:54未羊
日期:2014-11-14 11:31:58
27 [报告]
发表于 2015-09-01 18:32 |只看该作者
回复 12# bt21cnzy21st
  1. awk 'BEGIN{RS="cco1{[^}]+}|cbax[^]]+]"}{gsub(/,/,"|",RT);gsub(/{/,"(",RT);gsub(/}/,")",RT);print $0,RT}'|sed '{:1;N;$!b1; s/\n//g}'
复制代码
try

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-09-03 06:20:00
28 [报告]
发表于 2015-09-02 13:45 |只看该作者
感谢jason680 ,这个代码是没问题的,符合我的需求,而且很简练,赞一个。
回复 24# jason680


   

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-09-03 06:20:00
29 [报告]
发表于 2015-09-02 13:49 |只看该作者
经测试,你的代码是正确的, 十分感谢。赞一个

回复 25# Herowinter


   

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-09-03 06:20:00
30 [报告]
发表于 2015-09-02 13:53 |只看该作者
论坛有很多热心的朋友,不同的朋友给出了不同的答案 ,感谢大家,这里氛围很好,在此学到不少东西
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP