Chinaunix

标题: 请教大家一个问题! [打印本页]

作者: ddd123456    时间: 2008-02-22 09:50
标题: 请教大家一个问题!
有个a.txt文件,该文件有多列,
我用UE打开,想把文件起点为120,结束为125的字符串(该段字符为200801)替换成200802,如何用程序实现?

a.txt文件格式为:
24566633           2       478564333                 0000102008012120
                                                                                   ---------
想转换的结果为:
24566633           2       478564333                 0000102008022120
                                                                                   ---------
作者: davistar    时间: 2008-02-22 10:04
起点和终点指的是字符个数?


  1. sed 's/^\(.\{119\}\)\(200801\)/\1200802/'  urfile

复制代码

作者: 看不见的地平线    时间: 2008-02-22 23:28
sed 's/0000102008012120/0000102008022120/' urfile
这样也可以吧
作者: mcolinc    时间: 2008-02-23 17:20
量不大的话
FTP下直接编辑文件吧
作者: ddd123456    时间: 2008-02-25 13:12
呵呵,该方法:sed 's/^\(.\{119\}\)\(200801\)/\1200802/'  urfile
不行呀,把119开头的置换成200802后,放到文件开头了!
作者: ddd123456    时间: 2008-02-25 13:13
请大家再说下还有没其他的方法?!
作者: __lxmxn__    时间: 2008-02-25 13:28
  1. perl -ne "if(s/^(.{119}20080)1/${1}2/){print $_;}" ufile
复制代码

[ 本帖最后由 __lxmxn__ 于 2008-2-25 13:29 编辑 ]
作者: zhaoqinghu    时间: 2008-02-25 14:11
标题: 回复 #1 ddd123456 的帖子
请老兄把自己提的问题再写清楚一点好吗?
作者: ddd123456    时间: 2008-02-25 14:25
perl -ne "if(s/^(.{119}20080)1/${1}2/){print $_;}"  a.txt >b.txt
不好用,提示为:sh: 1: Parameter not set.
作者: ddd123456    时间: 2008-02-25 14:30
我的问题是:a.txt文件有多列数据,用UE修改不现实,
想用程序实现如下功能:
当用UE工具打开该文件,想把文件的起点为120,结束为125的字符串(该段字符为200801)替换成200802。
而用 sed 's/^\(.\{119\}\)\(200801\)/\200802/'  a.txt >b.txt
执行后的b.txt为:
200801200802            2       478564333                 000010

不是我希望转换的结果:
24566633           2       478564333                 0000102008022120
作者: ly5066113    时间: 2008-02-25 14:40
原帖由 ddd123456 于 2008-2-25 14:30 发表
sed 's/^\(.\{119\}\)\(200801\)/\200802/'  a.txt >b.txt


原帖由 davistar 于 2008-2-22 10:04 发表
起点和终点指的是字符个数?


sed 's/^\(.\{119\}\)\(200801\)/\1200802/'  urfile



比较下其中的差别。
作者: welcome008    时间: 2008-02-25 15:04
vi里直接批量替换
作者: ddd123456    时间: 2008-02-25 17:06
呵呵,我现用:
sed 's/^\(.\{119\}\)\(200801\)/\1200802/'  a.txt >b.txt
生成的结果b.txt和a.txt完全一样,没修改呀。
作者: ly5066113    时间: 2008-02-25 17:16
原帖由 ddd123456 于 2008-2-25 17:06 发表
呵呵,我现用:
sed 's/^\(.\{119\}\)\(200801\)/\1200802/'  a.txt >b.txt
生成的结果b.txt和a.txt完全一样,没修改呀。


因为你给的文本中:
24566633           2       478564333                 0000102008012120

200801前面不是119个字符,不知道你的“文件起点为120”怎么得来?
作者: ddd123456    时间: 2008-02-25 17:20
行数据里,当中有空格呀,一粘贴到网站就变形了,变短了!兄弟你在本机上帮测试下看,感觉还是不怎么好用呢!
作者: ly5066113    时间: 2008-02-25 17:25
原帖由 ddd123456 于 2008-2-25 17:20 发表
行数据里,当中有空格呀,一粘贴到网站就变形了,变短了!兄弟你在本机上帮测试下看,感觉还是不怎么好用呢!


测试是没什么问题的。
不要告诉我你的120是一个一个字符数出来的?
你无非是要将200801替换成200802,如果你的一行中200801只有一个,那就直接替换吧,不要搞什么120啦。
sed 's/200801/200802/' a.txt > b.txt
作者: ddd123456    时间: 2008-02-25 17:33
1)120是UltrEdit工具标尺显示的。
2)每行里的200801字符很多呀,直接替换会出大问题!
作者: ly5066113    时间: 2008-02-25 17:43
原帖由 ddd123456 于 2008-2-25 17:33 发表
1)120是UltrEdit工具标尺显示的。
2)每行里的200801字符很多呀,直接替换会出大问题!


那能不能确定你要替换的200801是第几个出现的?
后者以空格分隔,出现在第几个域中。
作者: blackold    时间: 2008-02-25 17:46
原帖由 ddd123456 于 2008-2-25 17:33 发表
1)120是UltrEdit工具标尺显示的。
2)每行里的200801字符很多呀,直接替换会出大问题!


楼主还是用UE解决吧。

标尺显示120,未必对应120Byte吧?
作者: ddd123456    时间: 2008-02-25 18:48
呵呵,主要文件太多了,要不早就用UE来做了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2