一般替换
s/old/new --- 替换当前行的第一个匹配项
s/old/new/g ---- 替换当前行所有的匹配项
number1,number2-s/old/new/g ---- 替换从number1行到number2行中所有的匹配项
1,$s/old/new/g = %s/old/new/g ----- 替换整个文件的所有匹配项
确认再替换
在替换命令后面加个c(confirm),例如1,30s/his/the/gc。每次找到匹配项时会提示是否需要替换,输入y,Enter确认替换,不需要替换直接Enter跳过
context-sensitive 替换 g/pattern/s/old/new/g
第一个g表示需要从所有行查找pattern,后面的g表示当前行所有的匹配项都替换。
如果pattern和old是一样的,old可以省略,这样的命令等同于%s/old/new/g
正则表达式匹配规则
. ---- 匹配除换行符以外的所有字符
* ---- 匹配0个或多个字符
^ ---- 匹配一行的开始
$ ---- 匹配一行的结束
---- 反意字符,表示后面的字符为一个常规字符。
( ) --- 占位符,一行最多可以有9个。例如(That) or (this) (That)为1号,后面需要用到That就可以使用1来代替,(this)为2号,是用2来调用。例如把That or this 替换为this or That则可以用命令%s/(That) or (this)/2 or 1
< /> ---- 匹配以字符开头或结尾的单词,例如<ac 匹配以ac开头的单词,ac/>则匹配以ac结尾的单词
~ ---- 在查找中匹配上一个使用的正则表达式。例如开始查找/The,现在想查找/Then,则可以使用/~n来代替/Then
POSIX character classes
[:alnum:] ---- 匹配字母数字字符
[:alpha:] ---- 匹配字母字符
[:blank:] ---- 匹配空格和Tab字符
[:cntrl:] ---- 匹配Control字符
[:digit:] ---- 匹配数字字符
[:graph:] ---- 匹配可打印的和可见的非空白字符
[:lower:] ---- 匹配小写字符
[:print:] ---- 匹配可打印的字符包括空白
[:punct:] ---- 匹配标点符号字符
[:space:] ---- 匹配空白字符
[:upper:] ----- 匹配大写字符
[:xdigit:] ---- 匹配16进制的数字字符
在替换字符中使用元字符
---- n表示0,9,前面说过( )保存的表达式
---- 表示后面的特殊字符为普通字符
& ---- 表示查到的字符串
~ ---- 表示上一次替换的字符串
u l ---- 表示改变其后的字符为大写的或小写的,例如s/(That) or (this)/u2 or l1 把That or this 替换成This or that
U L 和e E ---- 表示改变其后的字符为大写的或小写的直到e或E的出现