实验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

 (15)保存

命令::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) 显示LastNameKk开头的行

命令: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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。