当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 8 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 求个脚本:文本处理!
帖子发表于 : 2008-11-12 16:24 
头像

注册: 2007-08-05 17:40
帖子: 4970
送出感谢: 0 次
接收感谢: 4
数据文件 写道:
ASD01_FGH=1
ASD01_CVB=2
ASD01_ERT=3
ASD02_FGH=1
ASD02_CVB=2
ASD02_ERT=3
ASD03_FGH=1
ASD03_CVB=2
ASD03_ERT=3
ASD04_FGH=1
ASD04_CVB=2
ASD04_ERT=3

改写成:
目标 写道:
ASD_FGH[01]=1
ASD_CVB[01]=2
ASD_ERT[01]=3
ASD_FGH[02]=1
ASD_CVB[02]=2
ASD_ERT[02]=3
ASD_FGH[03]=1
ASD_CVB[03]=2
ASD_ERT[03]=3
ASD_FGH[04]=1
ASD_CVB[04]=2
ASD_ERT[04]=3

最好只用sed,最好只用一个sed语句。别用循环!
如果有其他跟好的办法,忽略我的要求。
谢谢啦!


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 求个脚本:文本处理!
帖子发表于 : 2008-11-12 16:51 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
代码:
sed 's/\(0[0-9]\)\(_[A-Z]..\)/\2[\1]/' file


代码:
xiooli(~/桌面)╠☪ cat a
ASD01_FGH=1
ASD01_CVB=2
ASD01_ERT=3
ASD02_FGH=1
ASD02_CVB=2
ASD02_ERT=3
ASD03_FGH=1
ASD03_CVB=2
ASD03_ERT=3
ASD04_FGH=1
ASD04_CVB=2
ASD04_ERT=3
xiooli(~/桌面)╠♦ sed 's/\(0[0-9]\)\(_[A-Z]..\)/\2[\1]/' a
ASD_FGH[01]=1
ASD_CVB[01]=2
ASD_ERT[01]=3
ASD_FGH[02]=1
ASD_CVB[02]=2
ASD_ERT[02]=3
ASD_FGH[03]=1
ASD_CVB[03]=2
ASD_ERT[03]=3
ASD_FGH[04]=1
ASD_CVB[04]=2
ASD_ERT[04]=3
xiooli(~/桌面)╠☪


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 求个脚本:文本处理!
帖子发表于 : 2008-11-12 17:05 
头像

注册: 2007-08-05 17:40
帖子: 4970
送出感谢: 0 次
接收感谢: 4
我猜就有人这样做,怪我例子给简单了。
引用:
AS_D01_F_GH=1
AS_D01_CV_B=2
AS_D01_ERT=3
AS_D02_F_GH=1
AS_D02_CV_B=2
AS_D02_ERT=3
AS_D03_F_GH=1
AS_D03_CV_B=2
AS_D03_ERT=3
AS_D04_F_GH=1
AS_D04_CV_B=2
AS_D04_ERT=3

转换成:
引用:
AS_D01_F_GH=1
AS_D_CV_B[01]=2
AS_D_ERT[01]=3
AS_D_F_GH[02]=1
AS_D_CV_B[02]=2
AS_D_ERT[02]=3
AS_D_F_GH[03]=1
AS_D_CV_B[03]=2
AS_D_ERT[03]=3
AS_D_F_GH[04]=1
AS_D_CV_B[04]=2
AS_D_ERT[04]=3

不只到04哈,最多到16。我要处理的数据就是这个格式的。基本一模一样。等号右边的不一定都是数字,啥都有。数字右边的字段长度不一,有固定范围!
不过仍要谢谢你,你的给我很大的提示!


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 求个脚本:文本处理!
帖子发表于 : 2008-11-12 17:17 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
sed 's/\([0-9].\)\(.*\)\(=\)/\2\3[\1]=/;s/=//' file
或者更科学点:
sed 's/\([0-9]\{2\}\)\(.*\)\(=\)/\2\3[\1]=/;s/=//' file


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 求个脚本:文本处理!
帖子发表于 : 2008-11-12 17:35 
头像

注册: 2007-08-05 17:40
帖子: 4970
送出感谢: 0 次
接收感谢: 4
经过你的提示,我也写成了,用了表达式分组。
sed 's/\([0-9][0-9]\)\(_[A-Z]\{1,6\}\(_[A-Z]\{1,5\}\)\{0,1\}\)/\2[\1]/' file

这是适用我的情况的。


最后由 cnkilior 编辑于 2008-11-12 22:30,总共编辑了 1 次

页首
 用户资料  
 
6 楼 
 文章标题 : Re: 求个脚本:文本处理!
帖子发表于 : 2008-11-12 17:46 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
cnkilior 写道:
经过你的提示,我也写成了,用了表达式分组。
sed 's/\([0-9][0-9]\)\(_[A-Z]\{1,6\}\(_[A-Z]\{1,5\}\)\{0,1\}\)/\2[\1]/' file

这是使用我的情况的。

好晕 :em06


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 求个脚本:文本处理!
帖子发表于 : 2008-11-12 22:30 
头像

注册: 2007-08-05 17:40
帖子: 4970
送出感谢: 0 次
接收感谢: 4
其实可以简单点。
sed 's/\([0-9][0-9]\)\(\(_[A-Z]\{1,6\}\)\{1,2\}\)/\2[\1]/' file

-------
\(_[A-Z]\{1,6\}\)是一个表达式分组,他匹配1-2次,
外面的是(不知道用什么东西说),也就是\2。

---------
我最初忘记了可以用正则表达式分组。

-------------
另外AS_D_ERT[04],以0开头的数组下标,bash理解为8进制下标,也就是AS_D_ERT[08]是非法的。


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 求个脚本:文本处理!
帖子发表于 : 2008-11-13 1:34 
头像

注册: 2005-12-28 1:16
帖子: 3916
地址: 火星
系统: Ubuntu 12.10 X64
送出感谢: 1
接收感谢: 0 次
代码:
sed  's/\([0-9]\+\)\([^=]*\)/\2[\1]/' file


_________________
目前负债150多万


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 8 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译