LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 700|回复: 2

关于sed的几个小问题~

[复制链接]
发表于 2005-1-25 20:41:55 | 显示全部楼层 |阅读模式
正在学习shell编程,从头开始的。问题比较弱,嘿嘿
有个文件datebook 内容入下:
Steve Blenheim:238-923-7366:95 Latham Lane,Easton,PA 83755:11/12/56:20300
Betty Boop:245-836-8357:635 Cutesy Lane,Hollywood,CA 91464:6/23/23:14500
Igor Chevsky:385-375-8395:3567 Populus Place,Caldwell,NJ23875:6/18/68:23400
Norma corder:397-857-2735:74 Pine Street,Dearborn,MI 23874:3/28/45:245700
Jennifer Cowan:548-834-2348:583 Laurel Ave.,Kingsville,TX 83745:10/1/35:58900
Jon DeLoach:408-253-3122:123 park St.,San Jose,CA 04086:7/25/53:85100
Karen Evich:284-758-2857:23 EDgecliff Place,Lincoln,NB 92743:7/25/53:85100
Karen Evich:284-758-2857:23 EDgecliff Place,Lincoln,NB 92743:1.1./25/53:85200
Karen Evich:284-758-2857:23 EDgecliff Place,Lincoln,NB 92743:11/25/53:85200
Fred Fardbarkle:674-843-1385:20 Parak lane,DeLuth,MN 23850:4/12/23:780900
Fred Fardbarkle:674-843-1385:20 Parak lane,DeLuth,MN 23850:4/12/23:780900
Lori Gortz:327-832-5728:3465 Mirlo Street,Peabody,MA 34756:10/2/65:35200
Paco Guiterrez:835-365-1284:454 Easy Street,Decatur,IL 75732:2/28/53:123500
Ephram Hardy:293-259-5395:235 CarltonLane,Joliet,IL 73858:8/12/20:56700
James Ikeda:834-938-8376:23445 Aster Ave.,Allentown,NJ 83745:12/1/38:45000
Barbara Kertz:385-573-8326:832 Ponce Drive.Gary,IN 83756:12/1/46:268500
Lesley Kirstin:408-456-1234:4 Harvard Square,Boston,MA 02133:4/22/62:52600
William Kopf:846-836-2837:6937 Ware Road,Milton,PA 93756:9/21/46:43500
Sir Lancelot:837-835-8257:474 Camelot Boulevard,Bath,WY 28356:5/1/69:24500
Jesse Neal:408-233-8971:45 Rose Terrace,San Francisco,CA 92303:2/3/36:25000
Zippy Pinhead:834-823-8319:2356 Bizarro Ave.,Farmount,IL 84357:1/1/67:89500
Arthur Putie:923-835-8745:23 Wimp Lane,Kensington,DL38758:8/31/69:126000
Popeye Sailor:156-454-3322:945 Bluto Street,Anywhere,USA 29358:3/19/35:22350
Jose Santiago:385-898-8357:38 Fife Way,Abilene,TX 39673:1/5/58:95600
Tommy Savage: 408-724-01.40:1222 Oxbow Court,Sunnyvale,CA 94087:5/19/66:34200
Yukio Takeshida:387-827-1095:13 Uno Lane,Ashville,NC 23556:7/3/29:57000
Vinh Tranh:438-910-7449:8235 Maple Street,Wilmington,VM 29085:9/23/63:68900

××××××××××××××××××××××××××××××××××××××××××××××××××××××
问题:
1 如何把 Popeye 的生日改为11/14/46
2 如何打印所有生日在Nov或Dec的行
3 如何调换姓和名

bow
多谢各位了。
发表于 2005-1-25 23:12:13 | 显示全部楼层
perl可以模拟sed,同时可以实现很多sed不能办的事情。
另外,sed和awk混用,可以使处理流程更清晰。

  1. cat datebook | perl -p -e 's@(^Popeye.*)\d+/\d+/\d+(.*)@${1}11/14/46$2@' | awk 'BEGIN{FS=":"}{split($4,a,"/");if(a[1]==11 || a[1]==10){split($1,a," ");printf("%s %s%s",a[2],a[1],FS);for(i=2;i<NF;i++)printf("%s%s",$i,FS);print $NF}}'
复制代码

处理结果:

  1. Blenheim Steve:238-923-7366:95 Latham Lane,Easton,PA 83755:11/12/56:20300
  2. Cowan Jennifer:548-834-2348:583 Laurel Ave.,Kingsville,TX 83745:10/1/35:58900
  3. Evich Karen:284-758-2857:23 EDgecliff Place,Lincoln,NB 92743:11/25/53:85200
  4. Gortz Lori:327-832-5728:3465 Mirlo Street,Peabody,MA 34756:10/2/65:35200
  5. Sailor Popeye:156-454-3322:945 Bluto Street,Anywhere,USA 29358:11/14/46:22350
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-1-25 23:20:04 | 显示全部楼层
这其实是一个正则的问题,掌握了正则的匹配方法,这个问题就很简单了。这里有几个很好的帖子,可以参照学习。
http://www.linuxsir.cn/bbs/showthread.php?threadid=24248
http://www.linuxsir.cn/bbs/showthread.php?threadid=23617
http://www.linuxsir.cn/bbs/showthread.php?threadid=100294
http://www.linuxsir.cn/bbs/showthread.php?threadid=109810
回复 支持 反对

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表