全屏幕编辑程序vi_第1页
全屏幕编辑程序vi_第2页
全屏幕编辑程序vi_第3页
全屏幕编辑程序vi_第4页
全屏幕编辑程序vi_第5页
已阅读5页,还剩39页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第3章章 全屏幕编辑程序全屏幕编辑程序vi3.1 vi的启动方法的启动方法3.2 vi的选项的选项3.3 vi的工作方式的工作方式3.4 vi的编辑命令的编辑命令早期的早期的UNIX提供的编辑器是行编提供的编辑器是行编辑辑eded。UNIX的全的全屏幕编辑器屏幕编辑器vivi,现在所有的现在所有的UNIX版本都支版本都支持持。目。目前,行编前,行编辑辑eded还还经常用于经常用于Shell脚本程序中,在脚脚本程序中,在脚本程序中,根据用户的输入信息修改一个文本文件本程序中,根据用户的输入信息修改一个文本文件的内容。行编辑程序的内容。行编辑程序eded的的显示是面向行的,对终显示是面向行的,对

2、终端的类型和特性没有任何的特殊要求和限制,端的类型和特性没有任何的特殊要求和限制,eded程序本身也比较简程序本身也比较简单。单。vivi可可以交互式编辑文本文以交互式编辑文本文件,编辑是面向屏幕的,终端的类型设置必须正确,件,编辑是面向屏幕的,终端的类型设置必须正确,否则无法正常工作。由否则无法正常工作。由于于vivi在在所有所有UNIX之间通用,之间通用,也可以应用于各种各样的终端,占用系统资源很少,也可以应用于各种各样的终端,占用系统资源很少,所以所以vivi仍仍然被广泛使用。然被广泛使用。 用法:用法:vi filename例如:例如:vi abc.c,启动启动vi编辑文件编辑文件ab

3、c.c。vi有搜索命令和卷动功能,可以用来浏览文本文件,有搜索命令和卷动功能,可以用来浏览文本文件,比比more,less等更方便,但是应当避免在浏览时对等更方便,但是应当避免在浏览时对文件无意中做出错误的修改。可以使用文件无意中做出错误的修改。可以使用view代替代替vi进入编辑程序,就不允许修改文件内容。进入编辑程序,就不允许修改文件内容。 3.1 vi的启动方法的启动方法 vi有有40多个选项控制多个选项控制vi的的运行。运行。1用用.exrc文件控制文件控制vi一启一启动后就自动读取用户自己主目录(动后就自动读取用户自己主目录(Home Directory)下的下的文件文件.exrc,

4、获取用户自设定的获取用户自设定的vi选选项,未指定的选项按默认值处理。项,未指定的选项按默认值处理。如:建立文件如:建立文件.exrc,其中含有如下两行:其中含有如下两行:set numberset showmode其中第一条命令使得其中第一条命令使得vi在列出每一行时,在左边列在列出每一行时,在左边列出行号。第二条命令使得出行号。第二条命令使得vi在屏幕右下角标志出当在屏幕右下角标志出当前是否处于输入状态。前是否处于输入状态。 3.2 vi的选项的选项 2在在vi中使用中使用set命令命令例:例::set number 在列出每一行时,左边列出行号在列出每一行时,左边列出行号:set sho

5、wmode 在屏幕右下角标志出当前是否处于输入状态在屏幕右下角标志出当前是否处于输入状态:set nonumber 在列出每一行时,在左边不列出行号在列出每一行时,在左边不列出行号:set noshowmode 在屏幕右下角不标志出当前是否处于输入在屏幕右下角不标志出当前是否处于输入状态状态:set all 列出所有开关的当前状态列出所有开关的当前状态一般的,设置选项和取消选项的命令格式分别为一般的,设置选项和取消选项的命令格式分别为(其中(其中option为选项名)为选项名):set option:set nooption vi的工的工作方式分命令方式和输入方式作方式分命令方式和输入方式。v

6、i启启动后就动后就进入命令方式,参见图进入命令方式,参见图3-1。图图3-1 vi的工作方式转换的工作方式转换 3.3 vi的工作方式的工作方式 处于命令方式时,用户键入的内容被当作处于命令方式时,用户键入的内容被当作vi的命令的命令来解释,一般处于命令方式下按键无回显(以冒号来解释,一般处于命令方式下按键无回显(以冒号打头的命令和查找命令除外)。打头的命令和查找命令除外)。编辑命令编辑命令i,a等等,可以从命令方式转到输入方式。可以从命令方式转到输入方式。处于输入方式时,用户键入的所有内容全部作为输处于输入方式时,用户键入的所有内容全部作为输入的正文内容,用户可以输入多行,每输入完一行入的正

7、文内容,用户可以输入多行,每输入完一行后按回车键转入下一行,正文输入时有回显。输入后按回车键转入下一行,正文输入时有回显。输入完毕,按键盘左上角的完毕,按键盘左上角的Esc键,返回到命令方式。键,返回到命令方式。 当当vi处于命令状态时,用户的按键不回显,被解释处于命令状态时,用户的按键不回显,被解释成编辑命令,成编辑命令,vi大约有大约有100多个编辑命令。下面介多个编辑命令。下面介绍的绍的vi命令子集,足可以完成一般的编辑任务。命令子集,足可以完成一般的编辑任务。 3.4 vi的编辑命令的编辑命令 命令命令i,在当前光标处插入(在当前光标处插入(insert)正文段,直至正文段,直至按按E

8、sc键。键。在命令方式下,在命令方式下,按下按下i键后,进入输入方式。从此以键后,进入输入方式。从此以后,输入的文本在屏幕上回显,输入完一整行后,后,输入的文本在屏幕上回显,输入完一整行后,按下按下Enter键,继续输入下一行。输入结束后,按键,继续输入下一行。输入结束后,按Esc键,退出输入方式,回到命令方式。回到命令键,退出输入方式,回到命令方式。回到命令方式之后,按键信息不再回显,所有的按键被解释方式之后,按键信息不再回显,所有的按键被解释为命令。许多传统的为命令。许多传统的UNIX中,中,vi必必须首先按下须首先按下Esc键退出输入模式之后再移动光标到其他行,修改后,键退出输入模式之后

9、再移动光标到其他行,修改后,移动光标回来,再移动光标回来,再按下按下i命令(或者命令(或者a,o,O)重重新新进入输入方式。在当前输入行的错误修正,使用进入输入方式。在当前输入行的错误修正,使用Backspace键,不需要退出输入方式。键,不需要退出输入方式。3.4.1 正文插入命令正文插入命令 除除了了i命令外,在命令外,在当前光标后追加(当前光标后追加(append)正文正文段的命段的命令令a,也可以进入输入模式,直至按也可以进入输入模式,直至按Esc键。键。命命令令o,在当在当前行之下插入新行(前行之下插入新行(open),),进入输进入输入模式,直至按入模式,直至按Esc键。键。大写字

10、母大写字母O命令,在当前行之上插入新行(命令,在当前行之上插入新行(open),),进入输入模式,直至按进入输入模式,直至按Esc键。键。 1单字符移动单字符移动h 光标左移一列光标左移一列j 光标下移一行光标下移一行k 光标上移一行光标上移一行l 光标右移一列光标右移一列在在vi中有许多命令可以在命令前加上一个整数,标中有许多命令可以在命令前加上一个整数,标志这个命令连续执行多少遍,例:志这个命令连续执行多少遍,例:5h 光标左移光标左移5列列6j 光标下移光标下移6行行23k 光标上移光标上移23行行10l 光标右移光标右移10列列3.4.2 光标移动命令光标移动命令 有的终端可以直接使用

11、键盘上的箭头按键代替这四个字有的终端可以直接使用键盘上的箭头按键代替这四个字母,更便于用户使用。母,更便于用户使用。vi被设计成对终端特性的依赖性被设计成对终端特性的依赖性最小,所以,不依赖于终端的功能键,仅使用键盘的最小,所以,不依赖于终端的功能键,仅使用键盘的字母、数字和符号键字母、数字和符号键vi就能完成编辑工作。就能完成编辑工作。 2翻页翻页Ctrl+B键:向键:向后翻页(后翻页(Backward)Ctrl+F键:键:向前翻页(向前翻页(Forward)Ctrl+U键:键:向上翻半页(向上翻半页(Up)Ctrl+D键:键:向下翻半页(向下翻半页(Down)在在vi中,中,把向文件尾方向

12、定义为把向文件尾方向定义为“向前向前”,向文件,向文件头方向定义为头方向定义为“向后向后”,这与许多人的习惯不同。,这与许多人的习惯不同。在在PC上的上的UNIX允许用允许用PgDn键代替键代替Ctrl+F键,用键,用PgUp键代替键代替Ctrl+B。也可以使用下面的键:也可以使用下面的键:6Ctrl+F键键:向前翻向前翻6页页15Ctrl+B键:向后翻键:向后翻15页页 3将光标移至当前行首将光标移至当前行首4将光标移至当前行尾将光标移至当前行尾$5移到右一个单词移到右一个单词 w W,移到左一个单词移到左一个单词 b Bw,b与与W,B的区别是它们对的区别是它们对“单词单词”的定义不同。的

13、定义不同。小写命令的命令小写命令的命令w和和b,以非字母、数字、下划线以非字母、数字、下划线之外的所有字符作为之外的所有字符作为“单词单词”分界符。大写命令的分界符。大写命令的命令命令W和和B,仅以空白符(空格或者制表符)作为仅以空白符(空格或者制表符)作为“单词单词”分界符。同前述其他命令类似,也可以使分界符。同前述其他命令类似,也可以使用类似用类似6w,3W,5b,10B命令。命令。 6移到指定的行移到指定的行使用这种方法可以立即将光标定位到需要修改的行。使用这种方法可以立即将光标定位到需要修改的行。例:例::476将光标定位于第将光标定位于第476行行:1将光标定位于第将光标定位于第1行

14、(文件首)行(文件首):$将光标定位于文件尾将光标定位于文件尾:$-10将光标定位于文件倒数第将光标定位于文件倒数第10行行在描述行号时,可以使用句点(在描述行号时,可以使用句点(.)代表当前行号,)代表当前行号,使用使用$代表最后一行的行号,而且可以使用整数加代表最后一行的行号,而且可以使用整数加减法,如最后一例。减法,如最后一例。 7括号配对命令括号配对命令 %先把光标移到一个大括号(或括号,或方括号)上,先把光标移到一个大括号(或括号,或方括号)上,按按%键,则光标自动定位到与它配对的那一个括号,键,则光标自动定位到与它配对的那一个括号,对编写和检查对编写和检查C语言的源程序非常有用。语

15、言的源程序非常有用。 vi允许设置允许设置以单个英文字母命名的最多以单个英文字母命名的最多26个标记个标记(mark),),许多编辑器把这种功能叫许多编辑器把这种功能叫“书签书签(bookmark)”。vi的书签的书签记忆了一个行号。记忆了一个行号。设置书签的命令是设置书签的命令是m。例如:顺序按下两个键例如:顺序按下两个键m和和a,尽管终端上没什么特别的显示信息,但是尽管终端上没什么特别的显示信息,但是,vi已经已经将当前行号记为名将当前行号记为名字为字为a的书签。的书签。设置的设置的所有书签,所有书签,在在vi退出后退出后,不再保存。,不再保存。vi许多编辑命令可以许多编辑命令可以使用命名

16、的书签,将光标移动使用命名的书签,将光标移动到指定书签处的命令是到指定书签处的命令是(单引号单引号)。例:例: a连续按下单引号和字母连续按下单引号和字母a,光标会移动到光标会移动到书签书签a处处 e光标移动到书签光标移动到书签e处处 3.4.3 设置书签设置书签 1删除当前字符的命令:删除当前字符的命令:x类似的,命令类似的,命令5x删除删除从当前光标开始的从当前光标开始的5个字符。个字符。2删除当前行的命令:删除当前行的命令:dd类似的,命类似的,命令令3dd删除从删除从当前行开始的当前行开始的3行。行。3与光标移动命令相关的删除命令与光标移动命令相关的删除命令de 从当前光标处删除到书签

17、从当前光标处删除到书签e处处d$ 从当前光标处删除到行尾从当前光标处删除到行尾d 从当前光标处删除到行首从当前光标处删除到行首dw 删除一个单词删除一个单词d% 将光标移动到一个括号字符上,删除和它配对将光标移动到一个括号字符上,删除和它配对的括号括起的段落的括号括起的段落 3.4.4 删除删除 1替换光标处字符的命令替换光标处字符的命令r例:例:ra命令将当前光标处字符替换为命令将当前光标处字符替换为a。如果希望将当前光标处开始的三个字符如果希望将当前光标处开始的三个字符依次替换为依次替换为abc,则需要按命令则需要按命令rarbrc。2替换多个字符的命令替换多个字符的命令R例:命令例:命令

18、Rabcdef,然后按然后按Esc键。键。该命令把从当前光标开始的字符依次替换为该命令把从当前光标开始的字符依次替换为abcdef,用用Esc键来结束多字符替换命令。这类似于以键来结束多字符替换命令。这类似于以“覆覆盖盖”(overwrite)方式进入编辑状态。方式进入编辑状态。 3.4.5 字符替换字符替换 1命令命令u取消上一次的编辑操作。例如:误删除了一段正文,取消上一次的编辑操作。例如:误删除了一段正文,用用u命令命令可以恢复到删除前的状态(可以恢复到删除前的状态(undo)。)。vi的取消操作,只能回退一次。许多新版本的取消操作,只能回退一次。许多新版本的的vi对对这个这个问题作了改

19、进。问题作了改进。2命令命令.重复上一次的编辑操作。按句点键,可以重复上一重复上一次的编辑操作。按句点键,可以重复上一次的编辑操作。例如:按次的编辑操作。例如:按3dd命令删除了命令删除了3行,然后行,然后按句点键就再删除按句点键就再删除3行,如果接着连续按句点(行,如果接着连续按句点(.)键,则每按一次删除键,则每按一次删除3行。行。 3.4.6 取消和重复取消和重复 (1)存盘退出)存盘退出ZZ,存盘退出存盘退出:wq(2)存盘不退出存盘不退出:w(3)不存盘退出不存盘退出:q!(4)读入一个文件插入到当前行之下读入一个文件插入到当前行之下:r a.c(5)写文件写文件把第把第50行至文件

20、尾的内容写到文件行至文件尾的内容写到文件junk中中:50,$w junk如果文件如果文件junk事先已经存在,使用下述命令强制把事先已经存在,使用下述命令强制把它覆盖掉它覆盖掉:50,$w! junk3.4.7 文件命令文件命令 如果编辑了文件之后,无法存盘(例如:文件没有如果编辑了文件之后,无法存盘(例如:文件没有写权限),那么可以用写权限),那么可以用:w file1将当前编辑好的文件内容存到另一个文件中。将当前编辑好的文件内容存到另一个文件中。1删除命令删除命令:d用法为:用法为::l1,l2d,删除第删除第l1l2行。例如:行。例如::10,50d删除第删除第1050行行:1,.d删

21、除文件首至当前行的部分删除文件首至当前行的部分2复制命令复制命令:co 用法为:用法为::l1,l2col3,将第将第l1l2行复制到第行复制到第l3行之下。行之下。例如:例如::5,10co56 复制第复制第510行到第行到第56行之下行之下3.4.8 段落的删除、复制和移动段落的删除、复制和移动 3移动命令移动命令:m用法为:用法为::l1,l2ml3,将第将第l1l2行移动到第行移动到第l3行之下。行之下。例如:例如::8,34m78 移动第移动第834行到第行到第78行之下行之下行号描述时除了可以使用句点代表当前行,行号描述时除了可以使用句点代表当前行,$代表代表最后一行,还可以使用最

22、后一行,还可以使用“书签书签”,例如,例如:下面的命下面的命令中令中e代表书签代表书签e的行号。的行号。:e,.d vi有一有一个通用的缓冲区和用单个的英文字母命名的个通用的缓冲区和用单个的英文字母命名的26个有名缓冲区,用于保留一些文本。前面介绍的个有名缓冲区,用于保留一些文本。前面介绍的删除命令,删除命令,vi会在会在删除了这些信息之后,自动把这删除了这些信息之后,自动把这些信息保留在通用缓冲区中。下面的命令都会执行些信息保留在通用缓冲区中。下面的命令都会执行两个操作:删除信息和将删除的信息放置到通用缓两个操作:删除信息和将删除的信息放置到通用缓冲区中。冲区中。dd删除当前行删除当前行3d

23、d 删除当前行开始的删除当前行开始的3行行de 删除从当前光标处到书签删除从当前光标处到书签e处(书签处(书签e需要事先需要事先用命令用命令me设置好)设置好)d$删除从当前光标处到行尾删除从当前光标处到行尾3.4.9 剪贴板剪贴板 d删除从当前光标处到行首删除从当前光标处到行首dw 删除一个单词删除一个单词d% 首先将光标定位到一个括号(或方括号、大括首先将光标定位到一个括号(或方括号、大括号)字符上,删除从此开始到和它配对的括号处号)字符上,删除从此开始到和它配对的括号处:1,.d删除文件首到当前行的段落删除文件首到当前行的段落将缓冲区中保留的信息粘贴到光标处,使用将缓冲区中保留的信息粘贴

24、到光标处,使用p命令命令(put或或paste)。)。除了上述的除了上述的d命令之命令之外,还有外,还有“抽取(抽取(yank)”命命令令y,它仅仅把指定的信息复制到通用缓冲区,但它仅仅把指定的信息复制到通用缓冲区,但不删除它们。用法和不删除它们。用法和d命命令类似。令类似。yy当前行当前行3yy 当前行开始的当前行开始的3行行ye 从当前光标处到书签从当前光标处到书签e处(书签处(书签e需要事先用命需要事先用命令令me设置好)设置好)y$从当前光标处到行尾从当前光标处到行尾y从当前光标处到行首从当前光标处到行首yw 一个单词一个单词y% 首先将光标定位到一个括号字符上,从此开始首先将光标定位

25、到一个括号字符上,从此开始到和它配对的括号处到和它配对的括号处:1,.y文件首到当前行的段落文件首到当前行的段落在信息保留到缓冲区之后,就可以使在信息保留到缓冲区之后,就可以使用用p命命令,将令,将它们粘贴到文件合适的位置。它们粘贴到文件合适的位置。vi除了使除了使用这个默认的缓冲区之外,还有用这个默认的缓冲区之外,还有26个用单个用单个英文字母命名的有名字的缓冲区。与缓冲区有关个英文字母命名的有名字的缓冲区。与缓冲区有关的的3个命令个命令是是d,y,p,在使用有名字缓冲区时,在在使用有名字缓冲区时,在这些命令前加两个字符的前缀,一个字符是双引号,这些命令前加两个字符的前缀,一个字符是双引号,

26、一个字符是英文字母代表的缓冲区名字。例如:一个字符是英文字母代表的缓冲区名字。例如:a3dd删除当前行开始的删除当前行开始的3行,并把信息保留到行,并把信息保留到a缓冲区中缓冲区中bye复制当前光标到书签复制当前光标到书签e处内容到处内容到b缓冲区缓冲区中中ky%光标定位在一个括号字符上,复制从此光标定位在一个括号字符上,复制从此开始到和它配对的括号处的段落到缓冲开始到和它配对的括号处的段落到缓冲区区k中中kp 粘贴出缓冲区粘贴出缓冲区k中的内容中的内容 1两行合并两行合并J(大写字母,大写字母,Join)把当前行下面的行合并到当前行。把当前行下面的行合并到当前行。2刷新屏幕显示刷新屏幕显示C

27、trl+L键键在阅读完在阅读完 “ “突然突然”出现的信息后,按出现的信息后,按Ctrl+L键,键,恢恢复复vi原先原先的屏幕显示。的屏幕显示。在在more命命令中也介绍过类令中也介绍过类似的功能。似的功能。3状态显示状态显示Ctrl+G键键在屏幕最下面一行列出正在编辑的文件的名字、总在屏幕最下面一行列出正在编辑的文件的名字、总行数、当前行号、文件是否被修改过等信息。行数、当前行号、文件是否被修改过等信息。 3.4.10 其他命令其他命令 在在vi的模式查找命令中,使用的模式查找命令中,使用“正则表达式正则表达式”来描来描述一个字符串模式。命令格式为:述一个字符串模式。命令格式为:/模式模式例

28、:例:/0-90-9*从文件当前位置开始向下查找能从文件当前位置开始向下查找能与正则表达式与正则表达式0-90-9*匹配的字匹配的字符串,找到后光标将定位于该处。符串,找到后光标将定位于该处。继续查找命令:继续查找命令:n和和N。小写字母小写字母n键,向下继续查键,向下继续查找下一个(找下一个(next),),查到文件尾后,自动折到文件查到文件尾后,自动折到文件首继续向下查找(循环搜索)。大写字母首继续向下查找(循环搜索)。大写字母N,向上向上继续查找下一个,查到文件头后自动折到文件尾继继续查找下一个,查到文件头后自动折到文件尾继续向上查找(循环搜索)。续向上查找(循环搜索)。 3.4.11

29、模式查找模式查找 1基本用法基本用法在在vi的的模式替换命令(模式替换命令(substitution)中,也使用中,也使用“正则表达式正则表达式”来描述一个字符串模式。命令格式来描述一个字符串模式。命令格式为:为::行号,行号行号,行号s/模式模式/替换字符串替换字符串/g其中,模式描述使用正则表达式。替换命令结束后其中,模式描述使用正则表达式。替换命令结束后在屏幕的最下面的状态行显示替换次数。在屏幕的最下面的状态行显示替换次数。3.4.12 模式替换模式替换 【例【例3-1】 将将abc字符串替换为字符串替换为xyz。:1,50s/abc/xyz/将第将第150行的字符串行的字符串abc换为

30、换为xyz,如果同一行内如果同一行内有多个有多个abc字符串,则只替换第一个。字符串,则只替换第一个。:1,50s/abc/xyz/g将第将第150行的字符串行的字符串abc换为换为xyz,如果同一行内如果同一行内有多个有多个abc字符串,则替换所有的字符串,则替换所有的abc字符串。字符串。:s/abc/xyz/g仅将当前行的字符串仅将当前行的字符串abc换为换为xyz,如果当前行中有如果当前行中有多个多个abc字符串,则替换所有的字符串,则替换所有的abc字符串。字符串。【例【例3-2】 在编辑在编辑C语言源程序时,把一部分行右移语言源程序时,把一部分行右移/左移左移4列。列。:50,80

31、s/ /g这样,在第这样,在第5080行的行首增加了行的行首增加了4个空格,从效个空格,从效果上看,第果上看,第5080行右移行右移 4列。列。:50,80s/ /g这样,在第这样,在第5080行的行首的行的行首的4个空格被替换成空个空格被替换成空字符串,从效果上看,第字符串,从效果上看,第5080行左移行左移4列(每行列(每行首部必须有首部必须有4个空格)。个空格)。2模式描述使用正则表达式模式描述使用正则表达式使用替换命令时应特别注意在描述模式时使用的是使用替换命令时应特别注意在描述模式时使用的是正则表达式,尤其是在编辑正则表达式,尤其是在编辑C语言源程序时,不要语言源程序时,不要忘记在应

32、该加转义符时加上转义符。忘记在应该加转义符时加上转义符。【例【例3-3】 注意注意vi替换命令中用于模式描述的正则替换命令中用于模式描述的正则表达式中的特殊字符。表达式中的特殊字符。(1)将)将end.改为改为middle.:1,$s/end./middle./g(2)删除每行尾部的一个字符)删除每行尾部的一个字符:1,$s/.$/g使使用用:1,$s/M/g不不能达到目的。能达到目的。(3)将将ai*bj替换为替换为xk*yn:1,$s/ai*bj/xk*yn/g将将buf.length/1000替换为替换为 buffer.size/1024。:1,$s/buf.length/1000/bu

33、ffer.size/1024/g(4)在编辑)在编辑C语言程序的时候,语言程序的时候,将将fn替换为替换为fi使用下面的命令使用下面的命令::1,$s/fn/fi/g结果会发现源程序中结果会发现源程序中的的fn未未被替换。正确命令是:被替换。正确命令是::1,$s/fn/fi/g类似的,将当前行开始到文件尾的段落中所有的类似的,将当前行开始到文件尾的段落中所有的x*y替换为替换为x+y,使用下面的命令:使用下面的命令::.,$s/x*y/x+y/g结果是,源程序中的结果是,源程序中的x*y被替换为被替换为x*x+y,而且,其而且,其他地方的他地方的y都被替换成了都被替换成了x+y。正确的用法是

34、:正确的用法是::.,$s/x*y/x+y/g 3替换字符串中的符号替换字符串中的符号&在替换字符串中特殊字在替换字符串中特殊字符符&代表被模式所匹配的代表被模式所匹配的那部分。那部分。【例【例3-4】 替换字符串中替换字符串中&符的作用。符的作用。设文件当前只含有四行,每行为一个整数,内容为:设文件当前只含有四行,每行为一个整数,内容为:521018执行下边的命令执行下边的命令:1,$s/0-90-9*/192.168.24.& host&/然后,文件内容变为:然后,文件内容变为:192.168.24.5 host5192.168.24.2 host2

35、192.168.24.10 host10192.168.24.18 host18上述命令描述模式时使用上述命令描述模式时使用0-90-9*,如果仅使用如果仅使用0-9*,是错误的。由于星号作用,是错误的。由于星号作用于它前边的单字于它前边的单字符正则表达式,可以是符正则表达式,可以是0次出现,所以次出现,所以0-9*可以与可以与任意任意“空字符串空字符串”匹配。匹配。&是是C语言中常用的符号,所以要特别注意。将语言中常用的符号,所以要特别注意。将*pointer替换为替换为&record的命令是:的命令是::1,$s/*pointer/&record/g 4使用正则表达

36、式的更灵活替换使用正则表达式的更灵活替换(和和)这种替换方法,扩展了基本的正则表达式,这种替换方法,扩展了基本的正则表达式,增加增加(和和),在左右括号前面缀以转义符。在正则表达,在左右括号前面缀以转义符。在正则表达式中出现的括号,仍然代表它自身。在正则表达式式中出现的括号,仍然代表它自身。在正则表达式中中出现出现的的(和和)不不影响匹配操作。影响匹配操作。下边的两个正则表达式匹配相同的字符串。下边的两个正则表达式匹配相同的字符串。a-zA-Z_a-zA-Z0-9_*-number(a-zA-Z_a-zA-Z0-9_*)-number字符串字符串ptr-number和和Term370_blk-

37、number都与都与上述两个正则表达式匹配。使用上述两个正则表达式匹配。使用(和和)的目的不在的目的不在于匹配操作,而是在于替换操作。对于能够匹配的于匹配操作,而是在于替换操作。对于能够匹配的字符串来说,用字符串来说,用(和和)标注出来的一段可以在替换标注出来的一段可以在替换字符串中使用。字符串中使用。上例中,在替换字符串中使用上例中,在替换字符串中使用1,就代表了,就代表了(和和)标标注出来的那段正则表达式所匹配的部分,上面给出注出来的那段正则表达式所匹配的部分,上面给出的两个字符串的例子中分别是的两个字符串的例子中分别是ptr和和Term3270_blk。如果正则表达式中有多段这样标记出的

38、部分,在替如果正则表达式中有多段这样标记出的部分,在替换字符串中分别使用换字符串中分别使用2,3,。【例【例3-5】 使用正则表达式中使用正则表达式中(和和)实现更灵活的替实现更灵活的替换功能。换功能。这种正则表达式替换在其他命令中和其他的非这种正则表达式替换在其他命令中和其他的非UNIX系统中也广泛使用,系统中也广泛使用,Windows的的Visual C+编辑器也支持此种替换。编辑器也支持此种替换。UNIX的的expr命令,也是命令,也是用这种方法从一个字符串中提取部分内容,用这种方法从一个字符串中提取部分内容,参见参见6.7.2小节的小节的“字符串运算字符串运算”部分。部分。(1)下边的

39、命令完成)下边的命令完成了了number到到num的替换,但的替换,但是这种替换仅限于在一个是这种替换仅限于在一个C语言指针引用之后的语言指针引用之后的number,对于其他地方出现的对于其他地方出现的number不进行替换。不进行替换。:1,$s/(a-zA-Z_a-zA-Z0-9_*)-number/1-num/g(2)将文件中的日期格式将文件中的日期格式“月月-日日-年年”改为改为“年年.月月.日日”,比如:比如:04-26-1997替换为替换为1997.04.26,使用,使用的命的命令为:令为::1,$s/(0-90-9)-(0-90-9)-(0-90-9*)/3.2.1/g(3)替换字符串中可以使用特殊替换字符串中可以使用特殊的的0代表代表被整个正被整个正则表达式匹配的部分,前面例则表达式匹配的部分,前面例3-4中的命令中的命令:1,$s/0-90-9*/192.168.24.& host&/也可以

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论