学习vi编辑器6

系统 1686 0

第六章 全局替换

全局替换真正使用的是ex的两个命令: :g (全局)和 :s (替换),替换命令的语法如下:

:s/old/new/

将把当前行中模式old第一次出现修改为new./(斜杠)是命令不同部分间的分隔符(当斜杠为该行的最后一个字符时,它是可选的)

:/s/old/new/g

把当前行old的每次出现改为new,而不只是该行的第一个old.:s命令允许替换串后面带有选项.g就代表全局(g选项影响一行中的每个模式,跟:g命令是不同的)

通过在:s命令前加上地址前缀,可以把它的范围扩展到多行,例如

:50,100s/old/new/g

:1,$s/old/new/g

:%s/old/new/g

确认替换

输入 u 来取消任何搜索替换命令

在进行全局替换前使用 :w 保存文件,这样可以 不保存编辑重开文件 或者输入 :e!

在替换前看到搜索结果和确认每个替换,则可以在替换命令的尾部加上c选项(用于确认)

:1,30s/his/the/gc

vi的 n(重复上次搜索) 点(.)(重复上次命令) 命令的结合也是一种极为有用的方法

/which             搜索which

cwthat ESC         修改为that

n                 重复搜索,跳过一次修改

n                 重复修改

.                 重复修改(如果正确)

上下文相关替换

:%s/editer/editor/g         把文件中editer的每次出现替换为editor

:g/patern/s/old/new/g

第一个g是在文件的所有行上执行的命令,模式pattern识别要发生替换的行.在那些包含模式pattern的行上,ex将把old替换(s)为new.最后的g表示在该行上进行全部替换

如果用来进行搜索的模式与想要修改的模式相同,就不用重复它

:g/string/s//new/g

将搜索包含string的行并对string进行替换

模式匹配规则

元字符在搜索模式中的使用

[]中需要\转义的是\ - 和 ]

\<    \>    \(    \)     比较特殊

POSIX的方括号表达式

方括号内的字符组称为"括号表达式" .在括号表达式中,除了像a !等那样的字面字符以外,还可以有其他的组成部分,他们是

字符类         由[:和:]包围的关键字组成,[[:alpha:]!]匹配任何一个单字母或感叹号

整理符号     被看做单一单元的多字符序列,由[.和.]所包围的字符组成,[[.ch.]]匹配ch

等价类         [[=e=]]在法语中可以匹配ēéěèe

POSIX字符类

匹配字符

[:alnum:]

字母数字字符

[:alpha:]

字母字符

[:blank:]

空格和制表符

[:cntrl:]

控制字符

[:digit:]

数字字符

[:graph:]

可打印和可见 ( 非空格 ) 字符

[:lower:]

小写字符

[:print:]

可打印字符 ( 包括空白 )

[:punct:]

标点字符

[:space:]

空白字符

[:upper:]

大写字符

[:xdigit:]

十六进制数字

元字符在替换串中的作用

当进行全局替换时,正则表达式只有在命令的搜索部分(第一部分)时才具有特殊含义,例如:

:%s/1\. Start/2. Next, start with $100/

后面的替换串按照 字面意思处理字符.和$ ,而不对它们进行转义

在替换串中具有特殊含义的元字符

\ n      前向引用括号包围的模式匹配串

\     把其后的字符转义,\\输出自己

&     代表与搜索模式相匹配的整个文本     :%s/abcdefg/&hij/     替换文本将是 abcdefghij

\u \l

把替换串中的下一个字符分别变为大写或小写.例如 :%s/\(Thant\) or \(this\)/\u\2 or \l\1/

\U或\L和\e或\E

从它们后面开始到替换串结束或到\e或\E出现为止的 所有字符都 转换为大些或小写,例如要把Fortran变成大写,可以输入 :%s/Fortran/\UFortran/ 或: %s/Fortran/\U&/

输入 :set ic 或者 :set ignorecase 忽略大小写

更多的替换技巧

  1. :s :s//~/ 相同 , 即重复上次替换
  2. & 表示一次替换 , 比如 :%&g 在各处重复上次替换
  3. & 键也可以作为 vi 命令来执行 :& RETURN 命令比 :s RETURN 输入更快
  4. :~ 命令和 :& 命令相似 , :~ 使用的搜索模式是上次 任何命令 所使用的正则表达式 , 而不局限于上次替换命令使用的正则表达式例如

    :s/red/blue/

    /green

    :~

    等价于 :s/green/blue/

  5. / , 可以使用除 \ " | 之外的任何非字母表、非空白字符作为分隔符 , 例如

    :%s;/user1/tim;/home/tim;g

学习vi编辑器6


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论