有关grep, sed, awk命令的练习题

回复 收藏
文件:datafile  内容!
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 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: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

一、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的名字改成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
2015-12-15 21:14 举报
已邀请:
0

qiaoxin360

赞同来自:

一、grep命令练习
1. 显示所有包含San的行
grep San ./datafile
2.显示所有以J开始的人名所在的行
grep '^J' ./datafile
3.显示所有以700结尾的行
grep '700$' ./datafile
4.显示所有不包括834的行
grep -v 834 ./datafile
5.显示所有生日在December的行
grep ':12/' ./datafile
6.显示所有电话号码的区号为498的行
grep 498 ./datafile 都找不到498呀
7.显示所有这样的行:它包含一个大写字母,后跟四个小写字母,一个冒号,一个空格,和一个大写字母
用grep -E '[A-Z][a-z]{4}: [A-Z]' ./datafile 找不到这样的行
8.显示姓以K或k开头的行
grep -E '^[a-zA-Z]+ [JK]' ./datafile
9.显示工资为六位数的行,并在前面加行号
grep -E ':[0-9]{6}$' ./datafile   ##最后面应该是工资吧
10.显示包括Lincoln或lincoln的行,并且grep对大小写不敏感.
grep -i lincoln ./datafile
二.sed命令大练习
1.把Jon的名字改成Jonathan
sed -i 's/^jon /jonathan/' ./datafile
2.删除头三行
sed -i '1,3'd ./datafile
3.显示5-10行
sed -n '5,10'p ./datafile
4.删除包含Lane的行.
sed -i '/Lane/'d ./datafile
5.显示所有生日在November-December之间的行
sed -nr '/:(11|12)\//'p ./datafile
6.把三个星号(***)添加到以Fred开头的行
sed -n 's/^Fred/***&/'p ./datafile
7.用JOSE HAS RETIRED取代包含Jose的行
sed -i 's/.*Jose.*/JOSE HAS RETIRED/p' ./datafile
8.把Popeye的生日改成11/14/46
sed -n '/Popeye/'p ./datafile |sed -nr 's@[0-9]+/[0-9]+/[0-9]+@11/14/46@'p
9.删除所有空白行
sed -i '/^$/'d ./datafile
10.写一个脚本,将:
.在第一行之前插入标题PERSONNEL FILE.
sed -i '1iPERSONNEL FILE' ./datafile
.删除以500结尾的工资
sed -i 's/500$/000/' ./datafile 应该是把500的零头去掉吧
.显示文件内容,把姓和名颠倒
sed -nr 's/(^[a-zA-Z]+)( )([a-zA-Z]+)(:.*)/\3\2\1\4/'p ./datafile
.在文件末尾添加THE END
sed -i '$aTHE END' ./datafile
或者echo "THE END" >> ./datafile
0

loveyouhyf

赞同来自:

qiaoxin360 发表于 2015-12-17 12:29
一、grep命令练习
1. 显示所有包含San的行
grep San ./datafile

不错,学习中
0

hlymlv

赞同来自:

学习了  感谢 {:4_98:}
0

t0ny1988

赞同来自:

本帖最后由 t0ny1988 于 2016-1-15 15:17 编辑

grep
1. grep San ./datafile
2.grep '^J' ./datafile
3. grep '700$' ./datafile
4.grep -v 834 ./datafile
5.grep ':12/' ./datafile
6.grep ':' ./datafile
7.grep '[A-Z][a-z]{4}: [A-Z]' ./datafile     不知道对不对!
8.grep -E '^[A-Za-z]+ [Kk]' ./datafile    有点疑问。
9.grep -E -n ':[0-9]{6}$' ./datafile
10.grep -i lincoln ./datafile
0

t0ny1988

赞同来自:

sed
1.sed -i 's/Jon/Jonathan/g' ./datafile
2.sed -i '1,3'd ./datafile
3.sed -n '5,10'p ./datafile
4.sed -i '/Lane/'d ./datafile
5.sed -n '/\:11\//'p ./datafile && sed -n '/\:12\//'p ./datafile
6.sed -ri 's/^Fred/&***/g' ./datafile
7.sed -n 's/Jose/JOSE HAS RETIRED/g'p ./datafile
8.sed -n '/Popeye/'p ./datafile | sed -rn 's#[0-9]+/[0-9]+/[0-9]+#/11/14/46#g'p
9.sed -i '/^$/'d ./datafile
0

t0ny1988

赞同来自:

脚本
#!/bin/bash
file=/data/datafile

if [ ! -f $file ]
then
   echo "$file is non-existent"
else
sed -i '1iPERSONNEL FILE' $file
sed -i '/500$/'d $file
sed -nr 's#(^[a-zA-Z]+)( )([a-zA-Z]+)(:.*)#\3\2\1\4#'p $file
sed -i '$aTHE END' $file
fi
0

thedawn

赞同来自:

1
0

riluozhiyue

赞同来自:

为什么没有答案?
0

zhangzihao

赞同来自:

还有人学习么
0

riverxyz

赞同来自:

本帖最后由 riverxyz 于 2016-7-28 08:36 编辑

一grep
1、grep -n 'San' datafile
2、grep -n '^J' datefile
3、grep '.*700$' datafile
4、grep -v '834' datafile
5、grep ':12' datafile
6、grep ':498' datafile
7、grep  -E '[A-Z][a-z]{4}: [A-Z]' datafile
8、grep -i '^k'  datafile
9、grep -E ':[0-9]{6}$' datafile
10、grep -i 'lincoln' datafile
二、sed
1、sed 's/Jon/Jonathan/g' datafile
2、sed '3d' datafile
3、sed -n '5,10'p datafile  
4、sed '/Lane/d' datafile
5、sed -E  ':11|:12' datafile
6、sed 's/^Fred.*/"*""*""*"&/' datafile
7、sed '/Joes/c JOSE HAS RETIRED' datafile
8、sed -n '/Popeye/'p datafile |sed -nr 's#[0-9]+/[0-9]+/[0-9]+#11/14/46#'p
9、sed 's/^$//g' datafile
10、sed '1i PERSONNEL FILE.' datefile
       sed 's/.*500$//g' datafile
       sed 's#(^[a-zA-Z]+)()([a-zA-Z]+)(:.*)#\3\2\1\4' datafile
       sed '$a THE END'
0

chenlei82486708

赞同来自:

1
0

xgmxm

赞同来自:

学习
0

dongdongchen

赞同来自:

grep的练习:

搜索以K或者k开头的姓氏的行:

grep "^[A-Z][a-z]\+ [Kk][a-z]\+" grep.test

显示工资为六位数的行:

grep -nE ':[0-9]{6}' grep.test

0

dongdongchen

赞同来自:

打印生日在10月到12月:

 sed -n  "/:1[0-2]\+\//"p  grep.test

把三个星号(***),添加到Fred开头的行:

sed -n "/^Fred/ s/^/\*\*\*/g"p grep.test 

把Popeye的生日改成11/14/46:

sed -nr "/^Popeye/ s#[0-9]+/[0-9]+/[0-9]+#11/14/46#g"p grep.test

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: