实验04 vim编辑器和正则表达式
一、实验目的
练习使用vim编辑器、掌握正则表达式和sed编辑器的使用
二、实验环境
CentOS 6.5系统.
三、实验内容
1. 练习使用vim编辑器
2. 利用grep和正则表达式进行文本过滤
3. 利用sed对文本进行过滤和编辑
四、实验步骤:
1、利用vim编辑文件employees,该文件的每一行包含一名雇员的信息,字段间以:分隔,每个字段含义如下:
姓名(FirstNameLastName):电话号码:家庭住址(门牌街道城市州邮政编码):出生日期:薪水
(1) 进入主目录
命令: cd ~
(2) 打开vim
命令: vim
(3) 编辑文件employees
命令::e employees
(4) 进入Insert模式,并输入一行内容如下(不要换行)并回到Normal模式:
Karen Evich:284-758-2857:23Edgecliff Place, Lincoln, NB 92086:7/25/53:85100
命令:I Karen Evich:284-758-2857:23 Edgecliff Place, Lincoln, NB92086:7/25/53:85100 Esc
(5) 复制当前行
命令:yy
(6) 在当前行下方粘贴2次
命令:2p
(7) 将第2行至第3行第一次出现的57替换成67
命令:
sed -n ‘2,3p‘ employees | sed‘s/56/67‘
///////:2,3s/57/67
(8) 将第2行至第3行第一次出现的086替换成743
命令:sed ‘2,3s/086/743’ employees
(9) 将第2行至第3行行尾的85100替换成58200
命令:sed ‘2,3s/85100$/58200’ employees
(10) 光标当前应在第3行,在当前行下方打开一个新行,输入如下内容后回Normal模式:
Fred Fardbarkle:674-843-1385:20Parak Lane, DeLuth, MN 23850:4/12/23:780900
命令:o Fred Fardbarkle:674-843-1385:20 Parak Lane, DeLuth, MN 23850:4/12/23:780900
(11) 复制当前行
命令:yy
(12) 在当前行下方粘贴1次
命令:p
(13) 跳至第1行
命令:gg
(14) 在第1行上方打开一个新行,输入如下6行内容并回Normal模式:
Steve Blenheim:238-923-7366:95Latham Lane, Easton, PA 83755:11/12/56:20300
Betty Boop:245-836-8357:635 CutesyLane, Hollywood, CA 91464:6/23/23:14500
Igor Chevsky:385-375-8395:3567Populus Place, Caldwell, NJ 23875:6/18/68:23400
Norma Corder:397-857-2735:74 PineStreet, Dearborn, MI 23874:3/28/45:245700
Jennifer Cowan:548-834-2348:583Laurel Ave., Kingsville, TX 83745:10/1/35:58900
Jon DeLoach:408-253-3122:123 ParkSt., San Jose, CA 04086:7/25/53:85100
命令::w
(16) 跳至最后一行
命令:G
(17) 在最后一行下方打开一个新行,输入如下16行内容并回Normal模式:
Lori Gortz:327-832-5728:3465 MirloStreet, Peabody, MA 34756:10/2/65:35200
Paco Gutierrez:835-365-1284:454 EasyStreet, Decatur, IL 75732:2/28/53:123500
Ephram Hardy:293-259-5395:235CarltonLane, Joliet, IL 73858:8/12/20:56700
James Ikeda:834-938-8376:23445Aster Ave., Allentown, NJ 83745:12/1/38:45000
Barbara Kertz:385-573-8326:832Ponce Drive, Gary, IN 83756:12/1/46:268500
Lesley Kirstin:408-456-1234:4Harvard Square, Boston, MA 02133:4/22/62:52600
William Kopf:846-836-2837:6937 WareRoad, Milton, PA 93756:9/21/46:43500
Sir Lancelot:837-835-8257:474Camelot Boulevard, Bath, WY 28356:5/13/69:24500
Jesse Neal:408-233-8971:45 RoseTerrace, San Francisco, CA 92303:2/3/36:25000
Zippy Pinhead:834-823-8319:2356Bizarro Ave., Farmount, IL 84357:1/1/67:89500
Arthur Putie:923-835-8745:23 WimpLane, Kensington, DL 38758:8/31/69:126000
Popeye Sailor:156-454-3322:945Bluto Street, Anywhere, USA 29358:3/19/35:22350
Jose Santiago:385-898-8357:38 FifeWay, Abilene, TX 39673:1/5/58:95600
Tommy Savage:408-724-0140:1222Oxbow Court, Sunnyvale, CA 94087:5/19/66:34200
Yukio Takeshida:387-827-1095:13 UnoLane, Ashville, NC 23556:7/1/29:57000
Vinh Tranh:438-910-7449:8235 MapleStreet, Wilmington, VM 29085:9/23/63:68900
(18)保存退出
命令:Esc :wq
2、利用grep和正则表达式过滤文件employees的行
(1) 显示所有包含San的行
命令:grep ‘San’ employees
(2) 显示所有以J开始的人名所在的行
命令: grep ‘^J’ employees
(3) 显示所有以700结尾的行
命令: grep ‘700$’ employees
(4) 显示所有不包括834的行
命令:grep –v ‘834’ employees
(5) 显示所有生日在12月份的行
命令:grep ‘12/.*/.*$’ employees
(6) 显示所有电话号码的区号为408的行
命令:grep ‘^.*:408-’ employees
(7) 显示所有这样的行:它包含一个大写字母,后跟四个小写字母,一个冒号,一个空格,和一个大写字母
命令:grep ‘[A-Z][a-z]{4}: [A-Z]’ employees
(8) 显示LastName以K或k开头的行
命令:grep ‘\w [K,k]’ employees
(9) 显示薪水为六位数的行,并在前面加行号
命令:grep ‘[0-9]\{6\}$’ employees
(10) 显示包括lincoln的行,忽略大小写
命令: grep -l ‘lincoln’ employees
3、利用sed和正则表达式对文件employees进行过滤和编辑
(1) 把Jon的名字改成Jonathan
命令:sed ‘s/Jon/Jonathan/g’ employees
(2) 删除头三行
命令:sed ‘1,3d’ employees | more
(3) 显示5-10行
命令:sed –n ‘5,10p’ employees
(4) 删除包含Lane的行
命令:sed ‘/Lane/d’ employees
(5) 显示所有生日在11月或12月的行
命令:sed –n ‘/:11\|12\/.*\/.*$/p’ employees
(6) 在以Fred开头的行末尾添加三个星号(***)
命令:sed ‘s/^Fred.*/&*** /g’ employees
(7) 把所有包含Jose的行替换为JOSE HAS RETIRED
命令:sed ‘s/Jose/JOSE HAS RETIRED/g’ employees
(8) 把Popeye的生日改成11/14/46,假定事先并不知道其现在所写的出生日期
命令:sed –n ‘/^Popeye/p’ employees
| sed ‘s/[0-9]\{1,2\}\/[0-9]\{1,2\}\/[0-9]\{1,2\}/11\/14\/46/g’
(9) 删除所有空白行
命令:sed ‘/^$/d’ employees
(10) 写一个脚本,实现如下需求:
a) 在第一行之前插入标题PERSONNEL FILE.
b) 删除以500结尾的工资
c) 显示文件内容,把姓和名颠倒
d) 在文件末尾添加THE END
脚本内容: 1i PERSONNEL FILE
/500/d
s/\([A-Z][a-z]*\)\([A-Z][a-z]*\):/\2\1:/g
$a\ THEEND
本文出自 “猪头痴人的博客” 博客,请务必保留此出处http://ronaldqinbiao.blog.51cto.com/6606843/1601432
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。