• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

如何替换文本中某段的数据??

发布: 2007-6-08 22:43 | 作者: seanhe | 来源: | 查看: 27次 | 进入软件测试论坛讨论

领测软件测试网
[size=18:6f41fc64fa][color=blue:6f41fc64fa]isql导出一文本 格式如下:
C900566 |  2 |  456566 |  5062011082099 |  28.00
C900566 |  2 |  456566 |  5062011082099 |  48.00
C900566 |  2 |  456566 |  5062011082099 |  25.00
C900566 |  2 |  456566 |  5062011082099 |  62.00
........
如何 将每行的第四个字段中的5062 替换 为 6022?
先谢谢了!!![/color:6f41fc64fa][/size:6f41fc64fa]

 gjp77 回复于:2004-09-20 19:19:49
用vi或者sed都可以的。命令记不清了,你找找以前的贴子,有的

 sdccf 回复于:2004-09-20 20:14:48
用sed处理:
sed -e 's/5062/6022/g'  yourfile.txt

用vi处理:
在命令状态下:

:g/5062/s//6022/g

 gjp77 回复于:2004-09-20 20:18:58
老大,在sed里是单引号还是双引号?

 sdccf 回复于:2004-09-20 20:23:21
都可以的。

 gjp77 回复于:2004-09-20 20:24:26
明白了,谢了

 sdccf 回复于:2004-09-20 20:26:08
你试一下就知道了。

 c1l2d3 回复于:2004-09-20 20:31:07
来个awk的:
长点儿 :oops: 
[code:1:a5d0e871a2]awk -F\| '{OFS="|"}{$4="6022"substr($4,5);print}' file[/code:1:a5d0e871a2]

 sdccf 回复于:2004-09-20 20:48:41
这下完整了。

 ChinaMobile 回复于:2004-09-20 21:07:03
cat yourfile|tr  "[5062]" "[6022]"
应该也可以,不过如果$2或者其他的字段里面也有5062的话,那要根据情况再进行修改了。还是awk写的比较严谨些。

 c1l2d3 回复于:2004-09-20 22:07:27
最近被perl所迷:
[code:1:ac24df9601]open(F,"<filename");while(<F>){@line=split(/\|/);$line[3]=~s/5062/6022/;print join("|",@line);};close(F);[/code:1:ac24df9601]

也很严谨

 .netrover 回复于:2004-09-20 22:17:56
vi 编辑
1,$s/5062/6022/g

 yutian 回复于:2004-09-21 09:14:48
窃以为把串前加一个"|"比较好,不会误换

 c1l2d3 回复于:2004-09-21 09:51:03
[quote:0d00cfe79c="yutian"]窃以为把串前加一个"|"比较好,不会误换[/quote:0d00cfe79c]

非也~~假如其他字段有以5062为开头,加"|"也是不行的.

 fl.w 回复于:2004-09-21 10:24:02
:em11: 俺也认为:
:g/|5062/s//|6022/g
更妥一些,但也不能完全保证其他字段被替换,最好awk筛一个。

 mudga 回复于:2004-09-21 11:17:11
用perl也可以很简单的
[code:1:b5791308fd]
perl -p -i -e "s/5062/6022/g" file
[/code:1:b5791308fd]

 rengongpu 回复于:2004-09-21 12:45:44
俺以为,还是VI比较好,不是什么多复杂的东西没有必要编程吧.有时也以利用一些其他软件,WINDOWS下的,(当然了,在同一局网内)

 zhkun 回复于:2004-09-21 14:28:18
我认为未必,若编辑一个经常使用的文本(如代收代发等等),可以使用shell程序,若只编辑一个一次使用的文本大可不必费神、劳其筋骨。

 tianci3982730 回复于:2004-09-22 11:33:19
多么无聊的话题啊

 redfoxmhy 回复于:2004-09-22 11:45:40
[size=18:72e2f29c09][color=blue:72e2f29c09]没想到有这么多哥哥姐姐帮忙,在此万福!!!
可今天我才发现文本有变如下:
2|502201940005|64466|50220110000500|24.90
2|502201940005|64466|50220110000528|35.90
2|502201940005|64466|50220110000537|28.60
2|502201940005|64466|50220110000611|36.90
2|502201940005|64466|50220110000622|29.30
用vi中的:g/|5022/s//6022/g
和sed替换 会把第二字段中的5022也换去啊,可要求是不能换啊
另外 有的哥哥说的awk 写的我看不太清啊,能...吗?
perl没用过能直接用吗?也会替换去第二段字中的5022 吗?
谢谢大家 了
另外 可能 有哥哥姐姐认为这是“无聊的话题啊 ”
不好意思 可我真的不太明白,是真心想问,你不要打击我好不?
我的心是很脆弱的,哈哈!
再次谢谢大家 了!!!! :em10:  :em13:  :em02: [/color:72e2f29c09][/size:72e2f29c09]

 CNL 回复于:2004-09-22 12:19:01
借c1|2d3的法子:
[code:1:49e2236b70]
awk -F\| '{OFS="|"}{$2="6022"substr($2,5);print}' file
[/code:1:49e2236b70]
OFS="|"告诉awk分隔符是"|"
$2表示第2个字段
 "6022"是你要换的新值,substr($2,5)表示第2字段从第5位开始的子串
$2=....表示更新第2字段内容为后面的值,
print打印出来
当然你可以输出到一个新文件里:
awk -F\| '{OFS="|"}{$2="6022"substr($2,5);print}'  oldfile > newfile

 redfoxmhy 回复于:2004-09-22 16:24:07
awk -F\| '{OFS="|"}{$2="6022"substr($2,5);print}' oldfile > newfile 
中的 -F\|  是连在一起的[color=blue:88c2b41e24][size=24:88c2b41e24]???[/size:88c2b41e24][/color:88c2b41e24]<<<-F re:允许awk更改其字段分隔符。>>>

 CNL 回复于:2004-09-22 18:39:30
-F\|是连在一起的,说明awk输入内容的分隔符是"|",前加\是防止|转义(|在shell里是特殊字符),
当然用单撇号把|括起来也可: awk -F'|' ....
OFS是指定print的输出分隔符,不一样的两个概念

 mudga 回复于:2004-09-22 18:53:43
用perl就没有awk这么方便了,那要写程序了。当然,如果只是全部替换,那还是很方便的

 redfoxmhy 回复于:2004-09-22 20:00:20
[color=blue:4789c7e8fc]一模一样的操作的可 sco505就是报错。............................
55555555555555555555555555555555555555 :(  :(  :( 
 :em10:  :em10:  :em10: 
#awk -F\|  '{[b:4789c7e8fc]OFS[/b:4789c7e8fc]="|"}{$2="6022"substr($2,5);print}' oldfile > newfile 

报 -F出错,错误提示没来的及抄下,明天再向哥哥姐姐汇报。
OFS 是大写的对吧? 

如果是这样:
awk -F  '{OFS="|"}{$2="6022"substr($2,5);print}' oldfile > newfile 
半天没动静,只是生成了一个空字节的文件 

AWK基本上是没用过,请哥哥姐姐不要笑啊!!!...............................[/color:4789c7e8fc]

 CNL 回复于:2004-09-22 21:01:28
[code:1:780e114efb]
awk     -F'|'     '{OFS="|"}{$2="6022"substr($2,5);print}'    old  > new
[/code:1:780e114efb]
这样呢?
-F后面啥都没有,分隔符会错的
awk语法:
awk [ -F sep ]  [ -v var=value ] ....

 redfoxmhy 回复于:2004-09-23 15:49:37
[color=blue:6b5cb3c4e9][size=18:6b5cb3c4e9]西西....
好了,一切顺利,谢谢哥哥姐姐们了!!!!!!!
 :mrgreen:  :em19:  :wink:  :wink:  :D  :D  :D  :oops: [/size:6b5cb3c4e9][/color:6b5cb3c4e9]

 swz 回复于:2004-09-23 16:58:35
用 C 写句不就结了.

 pucat 回复于:2004-11-02 13:51:11
呵呵,连我也懂的东西你也敢贴出现呀.用g/|5022011/s//6022011/g不就行了.

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网