Chinaunix首页 | 论坛 | 博客
  • 博客访问: 135693
  • 博文数量: 39
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 237
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-23 10:59
文章分类

全部博文(39)

文章存档

2016年(2)

2015年(25)

2014年(10)

2013年(2)

我的朋友

分类: LINUX

2015-07-15 23:00:21

说明:
(1)需要处理的文件名为datebook,文件内容已经粘贴在下面,从这个网页上拷贝到本地文本中有可能会有一些其他非可见字符,可以用sed l datebook命令查看字符;
(2)我的实验机器用的是bash shell


1.需要处理的文件datebook

点击(此处)折叠或打开

  1. Steve Blenheim:238-923-7366:95 Latham Lane, Easton, PA 83755:11/12/56:20300
  2. Betty Boop:245-836-8357:635 Cutesy Lane, Hollywood, CA 91464:6/23/23:14500
  3. Igor Chevsky:385-375-8395:3567 Populus Place, Caldwell, NJ 23875:6/18/68:23400
  4. Norma Corder:397-857-2735:74 Pine Street, Dearborn, MI 23874:3/28/45:245700
  5. Jennifer Cowan:548-834-2348:583 Laurel Ave., Kingsville, TX 83745:10/1/35:58900
  6. Jon DeLoach:408-253-3122:123 Park St., San Jose, CA 04086:7/25/53:85100
  7. Karen Evich:284-758-2857:23 Edgecliff Place, Lincoln, NB 92743:7/25/53:85100
  8. Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200
  9. Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200
  10. Fred Fardbarkle:674-843-1385:20 Parak Lane, Duluth, MN 23850:4/12/23:780900
  11. Fred Fardbarkle:674-843-1385:20 Parak Lane, Duluth, MN 23850:4/12/23:780900
  12. Lori Gortz:327-832-5728:3465 Mirlo Street, Peabody, MA 34756:10/2/65:35200
  13. Paco Gutierrez:835-365-1284:454 Easy Street, Decatur, IL 75732:2/28/53:123500
  14. Ephram Hardy:293-259-5395:235 CarltonLane, Joliet, IL 73858:8/12/20:56700
  15. James Ikeda:834-938-8376:23445 Aster Ave., Allentown, NJ 83745:12/1/38:45000
  16. Barbara Kertz:385-573-8326:832 Ponce Drive, Gary, IN 83756:12/1/46:268500
  17. Lesley Kirstin:408-456-1234:4 Harvard Square, Boston, MA 02133:4/22/62:52600
  18. William Kopf:846-836-2837:6937 Ware Road, Milton, PA 93756:9/21/46:43500
  19. Sir Lancelot:837-835-8257:474 Camelot Boulevard, Bath, WY 28356:5/13/69:24500
  20. Jesse Neal:408-233-8971:45 Rose Terrace, San Francisco, CA 92303:2/3/36:25000
  21. Zippy Pinhead:834-823-8319:2356 Bizarro Ave., Farmount, IL 84357:1/1/67:89500
  22. Arthur Putie:923-835-8745:23 Wimp Lane, Kensington, DL 38758:8/31/69:126000
  23. Popeye Sailor:156-454-3322:945 Bluto Street, Anywhere, USA 29358:3/19/35:22350
  24. Jose Santiago:385-898-8357:38 Fife Way, Abilene, TX 39673:1/5/58:95600
  25. Tommy Savage:408-724-0140:1222 Oxbow Court, Sunnyvale, CA 94087:5/19/66:34200
  26. Yukio Takeshida:387-827-1095:13 Uno Lane, Ashville, NC 23556:7/1/29:57000
  27. Vinh Tranh:438-910-7449:8235 Maple Street, Wilmington, VM 29085:9/23/63:68900


2.题目
1.把Jon的名字改为Jonnathan.
2.删除头3行。
3.打印第5~10行。
4.删除含有Lane的所有行。
5.打印所有生日在十一月或十二月的行
6.在以Ered开头的各行末尾加上3颗星。
7.将所有包含Jose的行都替换为JOSE HAS RETIRED.
8.把Popeye的生日改为11/14/46,假定您不知道Popeye的生日,设法用正则表达式查找出来。
9.删除所有空行
10.写一个能完成下列任务的sed脚本。
  a)在第一行上方插入标题PERSONNEL FILE.
  b)删除以500结尾的工资项
  c)把名和姓的位置颠倒后,打印文件内容
  d)在文件末尾加上THE END.

answer:
1.
    sed -n s'/Jon/Jonnathan/gp' datebook
2.
    sed '1,3d' datebook
3.
    sed -n '5,10p' datebook
4.
    sed '/Lane/d' datebook
5.这里查找匹配生日,观察到生日的表示方式为:[0-9]*/[0-9]*/[0-9]*:  所以采用这个模式来进行匹配
    sed -n '/\:1[12]\/[0-9]*\/[0-9]*/p'detabook
6.说明首先删除不以“Fred ”打头的行,然后找找到结尾的字符:\r{0,1\}$  --->可能是因为我的datebook文件从网上copy过来的原因,利用sed -l 参数查看的时候有行尾是\r$这样的字符,所以为了保险起见,用\r{0,1\}$匹配。
    sed -e '/^Fred /!d' -e 's/\r\{0,1\}$/***/' datebook
7. 说明:我的机器是bash shell,参数 “/Jose/c”中的/c表示替换Jose所在的行;“/c”后面紧接的"\"表示换行,后面接替换模式行的内容。
    sed '/Jose/c\JOSE HAS RETIRED' datebook
8.同6类似,先去掉无关的项,再从剩下的项中匹配生日的模式,再替换
    sed -e '/^Popeye /!d' -e 's/:[0-9]*\/[0-9]*\/[0-9]*:/:11\/14\/46:/' datebook
9.从文件可以看出所有非空行都以大写字母后面再跟一个小写字母开始,否则就是空行
    sed '/^[A-Z][a-z]/!d' datebook
10.文件的内容如下:
1i\
PERSONNEL FILE.
/500\r\{0,1\}$/d
s/^\([A-Z][a-z]*\) \([A-Z][a-z]*\)/\2 \1/
$a\
THE END.

阅读(813) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~