免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-09-03 06:20:00
11 [报告]
发表于 2015-08-31 19:23 |只看该作者
回复 7# Herowinter

谢谢在百忙之中看我的问题


现在我要的最终效果是如下,其中只替换有cco1和cbax后的部分,其他不管

原文:
(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}]})

替换后:
(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)]})



   

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-09-03 06:20:00
12 [报告]
发表于 2015-08-31 19:28 |只看该作者
回复 6# rulebook

感谢回复,

现在我想要的最终效果是如下,其中只替换有cco1和cbax后的部分,其他不管

原文:
(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}]})

替换后:
(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)]})



   

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-09-03 06:20:00
13 [报告]
发表于 2015-08-31 19:33 |只看该作者
up,这个论坛的人气还挺旺的

论坛徽章:
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
14 [报告]
发表于 2015-08-31 20:34 |只看该作者
本帖最后由 Herowinter 于 2015-08-31 20:35 编辑

回复 11# bt21cnzy21st

这样可以,但是...

  1. awk 'match($0,/cco1\{[^}]*\}/){s1=substr($0,1,RSTART-1);s2=substr($0,RSTART,RLENGTH);s3=substr($0,RSTART+RLENGTH);sub(/{/,"(",s2);sub(/}/,")",s2);gsub(/,/,"|",s2);$0=s1""s2""s3} 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)]})
复制代码

论坛徽章:
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
15 [报告]
发表于 2015-08-31 20:41 |只看该作者
本帖最后由 haooooaaa 于 2015-08-31 21:03 编辑
  1. $ awk '{patsplit($0,t,"(cco1{[^}]*}|cbax\\[[^\\]]*\\])",m);for(i=1;i<length(m);i++){gsub(",","|",t[i]);gsub("{","(",t[i]);gsub("}",")",t[i]);s=s""t[i]""m[i]}print m[0]""s""m[length(m)];s=b}' FILE
  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)]})
复制代码

论坛徽章:
26
2015亚冠之胡齐斯坦钢铁
日期:2015-06-25 21:40:202015亚冠之柏斯波利斯
日期:2015-08-31 17:03:192015亚冠之柏斯波利斯
日期:2015-11-07 13:10:00程序设计版块每日发帖之星
日期:2015-11-10 06:20:00每日论坛发贴之星
日期:2015-11-10 06:20:00程序设计版块每日发帖之星
日期:2015-11-26 06:20:00程序设计版块每日发帖之星
日期:2015-12-02 06:20:00黄金圣斗士
日期:2015-12-07 17:57:4615-16赛季CBA联赛之天津
日期:2015-12-23 18:34:14程序设计版块每日发帖之星
日期:2016-01-02 06:20:00程序设计版块每日发帖之星
日期:2016-01-06 06:20:00每日论坛发贴之星
日期:2016-01-06 06:20:00
16 [报告]
发表于 2015-08-31 20:49 |只看该作者
回复 1# bt21cnzy21st

大神,我想战个痛快。
不过可惜,
看不懂题目,
被迫放弃不玩了。

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-09-03 06:20:00
17 [报告]
发表于 2015-08-31 20:52 |只看该作者
回复 15# haooooaaa

谢谢,但patsplit' 函数好像没定义在我的版本上,报错如下,能换个方式吗

function `patsplit' not defined


   

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-09-03 06:20:00
18 [报告]
发表于 2015-08-31 20:54 |只看该作者
回复 14# Herowinter

看得有点晕了, 这么长, 感觉阁下欲言又止的样子, 能否说说思路


   

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

笨办法, 不大满意自己的代码而已, 结果正确吗?
   

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-09-03 06:20:00
20 [报告]
发表于 2015-08-31 21:13 |只看该作者
大虾, 这个脚本针对特定的这个能转换,但我多复制几个cbax ,cco1就不行了啊, 测试文本如下:

(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}})


回复 14# Herowinter


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP