【linux】vi编辑器学习-匹配模式替换

来源:互联网 发布:网络异常 请重新登录 编辑:程序博客网 时间:2024/06/03 20:55
模式匹配规则
在进行全局替换时,类似于 vi 的 UNIX 编辑器允许你搜索的不只是固定的字符串,还允许搜索由正则表达式指代的可变的单词模式。
正则表达式由普通字符和许多称为元字符的专用字符结合在一起组成。
(1) 元字符在搜索模式中的使用
.         匹配除换行符之外的任何一个单个字符
*        匹配其前面的单个字符的0个或多个实例
^       以什么开始,当^不在正则表达式的开始时,^只代表本身
$       以什么结尾,当$不在正则表达式的结尾时,$只代表本身
/       将后面的专用字符看成普通字符,/(反斜杠)会防止对专用字符的解释。例如,/. 与一个真正的点匹配,而不是“任何单个字符”
[ ]     匹配方括号所包括的字符中的任何一个。例如,[AB] 匹配A或B。

注意:
(1) 可以通过使用连字符分开该范围的首尾字符来指定连续的字符范围。例如,[A-Z] 将匹配A到Z之间的任何一个大写字母,[0-9] 将匹配0到9之间的任何一个数字。
(2) 可以在方括号内包含多个范围,也可以把范围和单独的字符混合在一起。例如,[:;A-Za-z()] 将匹配4种不同的标点符号和所有的字母。
(3) 大部分元字符都将在方括号内失去它们的特殊含义,因此不需要转义,在方括号内,仍需要转义的3个元字符是 /、- 和 ] 。
(4) 插入符号(^)只有它在方括号内为第一个字符时才有特殊含义,但是在这种情况下其含义与通常 ^ 元字符的含义不同。作为方括号的第一个字符,^ 使它们的含义反过来:方括号将匹配不在列表内的任何一个字符。例如,[^a-z] 将匹配任何不是小写字母的字符。

/(   /)     把 /( 和 /) 之间的模式保存到专门的存储空间或“存储缓冲区”中。这种方式最多可以把 9 个模式保存到单一行中。例如:
/(That/) or /(this/)             把 That 保存到 1 号存储缓冲区,把 this 保存到 2 号存储缓冲区。可以在替换中使用序列 /1 到 /9 来重新引用存储的模式。


/<   />   在单词的开始(/<)或结尾(/>)匹配字符。单词的结束或开始由标点符号或空格决定。
注意:与 /(.../) 不同的是,这些命令不必成对使用。

        匹配在上次搜索中使用的任何正则表达式。(少用)

在末行模式下:输入

:%s/\(DNS1=192.16\)9.9.2/\18.44.2/g

将DNS1=192.169.9.2替换成DNS1=192.168.44.2,其中\1标识了\(        \)之间的DNS1=192.16


一般在替换的时候会带着/,这样还需要转义比较麻烦,可以用@或者#作为分割

:%s@\(export JAVA_HOME=\)/usr/java/bin@\1/usr/java/jdk1.7.0_67@g






0 0