说明:
(1)需要处理的文件名为datebook,文件内容已经粘贴在下面,从这个网页上拷贝到本地文本中有可能会有一些其他非可见字符,可以用sed l datebook命令查看字符;
(2)我的实验机器用的是bash shell
1.需要处理的文件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, NJ 23875: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-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200
-
-
Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200
-
-
Fred Fardbarkle:674-843-1385:20 Parak Lane, Duluth, MN 23850:4/12/23:780900
-
-
Fred Fardbarkle:674-843-1385:20 Parak Lane, Duluth, MN 23850:4/12/23:780900
-
-
Lori Gortz:327-832-5728:3465 Mirlo Street, Peabody, MA 34756:10/2/65:35200
-
-
Paco Gutierrez: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/13/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, DL 38758: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-0140:1222 Oxbow Court, Sunnyvale, CA 94087:5/19/66:34200
-
-
Yukio Takeshida:387-827-1095:13 Uno Lane, Ashville, NC 23556:7/1/29:57000
-
-
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.
阅读(867) | 评论(0) | 转发(0) |