转载自linuxsir的shell版
http://www.linuxsir.org/bbs/showthread.php?t=23617
文件:datafile
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 :23400Norma 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 92086 : 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, 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 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 :22350Jose 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
grep命令练习
1.显示所有包含San的行
2.显示所有以J开始的人名所在的行
3.显示所有以700结尾的行
4.显示所有不包括834的行
5.显示所有生日在December的行
6.显示所有电话号码的区号为498的行
7.显示所有这样的行:它包含一个大写字母,后跟四个小写字母,一个冒号,一个空格,和一
个大写字母
8.显示姓以K或k开头的行
9.显示工资为六位数的行,并在前面加行号
10.显示包括Lincoln或lincoln的行,并且grep对大小写不敏感.
sed命令练习
1.把Jon's的名字改成Jonathan.
2.删除头三行
3.显示5-10行
4.删除包含Lane的行.
5.显示所有生日在November-December之间的行
6.把三个星号(***)添加到也Fred开头的行
7.用JOSE HAS RETIRED取代包含Jose的行
8.把Popeye的生日改成11/14/46
9.删除所有空白行
10.写一个脚本,将:
.在第一行之前插入标题PERSONNEL FILE.
.删除以500结尾的工资
.显示文件内容,把姓和名颠倒
.在文件末尾添加THE END
文件:datafile
Christian Dobbins:[ 408 ] 538 - 2358 : 155 : 90 : 201
Susan Dalsass:[ 206 ] 654 - 6279 : 250 : 60 : 50
Archie McNichol:[ 206 ] 548 - 1348 : 250 : 100 : 175
Jody Savage:[ 206 ] 548 - 1278 : 15 : 188 : 150
Guy Quigley:[ 916 ] 343 - 6410 : 250 : 100 : 175
Dan Savage:[ 406 ] 298 - 7744 : 450 : 300 : 275
Nancy McNeil:[ 206 ] 548 - 1278 : 250 : 80 : 75
John Goldenrod:[ 916 ] 348 - 4278 : 250 : 100 : 175
Chet Main:[ 510 ] 548 - 5258 : 50 : 95 : 135
Tom Savage:[ 408 ] 926 - 3456 : 250 : 168 : 200
Elizabeth Stachelin:[ 916 ] 440 - 1763 : 175 : 75 : 300
awk命令练习
上面的数据库中包含名字,电话号码和过去三个月里的捐款
1.显示所有电话号码
2.显示Dan的电话号码
3.显示Susan的名字和电话号码
4.显示所有以D开头的姓
5.显示所有以一个C或E开头的名
6.显示所有只有四个字符的名
7.显示所有区号为916的人名
8.显示Mike的捐款.显示每个值时都有以$开头.如$250$100$175
9.显示姓,其后跟一个逗号和名,如Jody,Savage
10.写一个awk的脚本,它的作用:
11.显示Savage的全名和电话号码
12.显示Chet的捐款
13.显示所有头一个月捐款$250的人名.
注:区号本来是圆括号表示的.
grep:
1.grep "San" datafile
2.grep '^J' datafile
3.grep '700$' datafile
4.grep -v "834" datafile
5.grep '/:12//' datafile
6.grep '/:498/-' datafile #是不是作者写错了,好象没有这样的行
7.grep '[A-z][a-z]/{4/}/:[[:space:]][A-Z]' datafile #好象也没有这样的行,或者我的不对^_^
8. grep '[a-z]/{1,/}[[:space:]][Kk]' datafile
9.grep -n '[0-9]/{6,/}$' datafile
10.grep -i "lincoln" datafile
grep [lL]incoln datefile
sed
1.sed 's/Jon/Jonathan/g' datafile
2.sed '1,3d' datafile
3.sed -n '5,10p' datafile
4.sed '/Lane/d' datafile
5.sed -n '/:1[12]//p' datafile #有这样写的:sed -n '/[:::]1[1-2][:/:]/p' datafile. 不知对不对,谁能给讲下,谢谢
6.sed -e 's/^Fred/***Fred/' datafile
7. sed -e 's/.*Jose.*/JOSE HAS RETIRE/g' datafile
8.sed -n '/^Popeye/p' datafile |sed 's/[0-9]/{1,/}//[0-9]/{1,/}//[0-9]/{1,/}/11//14//46/'
9.sed '/^$/d' datafile
awk:
1.awk -F : '{print $2'} datafile
2.awk -F: '/^Dan/{print $2}' datafile
3.awk -F: '/^Susan/{print $1 ,$2}' datafile
4.awk -F: '{print $1}' datafile |awk '{print $2}' |awk '/^D/'
5.awk -F: '{print $1}' datafile |awk '{print $1}' |awk '/^[CE]/'
6.awk -F: '{print $1}' datafile |awk '{if(length($1) == 4)print $1}'
7.awk -F: '//[916/]/{print $1}' datafile
8.awk -F: '/^Mike/{print "$"$3"$"$4"$"$5}' datafile
9.awk -F: '{print $1}' datafile|awk '{print $2,",",$1}'
#!/bin/awk -f
BEGIN{
FS=":"}
{if($1 ~/ Savage/) print $1":"$2}
{if($1 ~/^Chet /) print "$"$3":$"$4":$"$5}
{if($3 == 250) print $1}#这个是抄别人的,以上的也有参照别人的.