-
查找关键字并计数
:%s/keyword//gn
-
查找关键字并删除对应行
:g/keword/d
-
删除不包含关键字的行:
:v/keword/d
-
删除重复行
:sort
g/^\(.\+\)$\n\1/d
-
删除所有行
:0
:.,$d
- 查找关键字并复制对应行到新文件:
" Clear register A :let @a="" " Append all lines which matchs book to register A :g/keword/y A " Open a new file :new filename " Paste content of register A into the new file :put a
也可以先新建一个文件,比如`res.txt’,然后用如下命令完成:
g/keyword/. w >> res.txt
- 正则相关:
原始文件如下所示:
1,eteatte,f312efa 2,fafefa,fawea …… 1000, ffafef
想把上面文件中的行首序号后面的’,’替换为’#’,求助于正则匹配的方式:
:%s/^\(\d*\),/\1#/g
:%s/old_string/new_string/g
为替换的命令,但是由于其他地方也包含逗号,直接用这个命令并不合适。 我们需要的是匹配行首的数字后面的逗号,然后保留数字,将逗号替换掉,这还需要在后面用到匹配到的数字。^
表示行首匹配\d*
表示匹配任意数字\(
\)
之间包含的,可以在后面用\1
\2
来获取匹配到的值。 因此,用上述命令可以完成对应的替换。
附:vim中的正则
单个字符,如果要查找字符 * . /
等,则需要在前面用 \
符号,表示这不是元字符,而只是普通字符而已。
元字符 | 说明 |
---|---|
. |
匹配任意一个字符 |
[abc] |
匹配方括号中的任意一个字符。可以使用-表示字符范围, 如 [a-z0-9] 匹 配小写字母和阿拉伯数字。 |
[^abc] |
在方括号内开头使用^符号,表示匹配除方括号中字符之外的任意字符。 |
\d |
匹配阿拉伯数字,等同于[0-9] 。 |
\D |
匹配阿拉伯数字之外的任意字符,等同于[^0-9] 。 |
\x |
匹配十六进制数字,等同于[0-9A-Fa-f] 。 |
\X |
匹配十六进制数字之外的任意字符,等同于[^0-9A-Fa-f] 。 |
\w |
匹配单词字母,等同于[0-9A-Za-z_] 。 |
\W |
匹配单词字母之外的任意字符,等同于[^0-9A-Za-z_] 。 |
\t |
匹配 |
\s |
匹配空白字符,等同于[ \t] 。 |
\S |
匹配非空白字符,等同于[^ \t] 。 |
表示数量的字符:
元字符 | 说明 |
---|---|
* |
匹配0-任意个 |
\+ |
匹配1-任意个 |
\? |
匹配0-1个 |
\{n,m} |
匹配n-m个 |
\{n} |
匹配n个 |
\{n,} |
匹配n-任意个 |
\{,m} |
匹配0-m个 |
表示位置的字符:
元字符 | 说明 |
---|---|
^ |
行首 |
$ |
行尾 |
\< |
单词词首 |
\> |
单词词尾 |
高级用法:
- 在正规表达式中使用
\(
和\)
符号括起正规表达式,即可在后面使用\1
、\2
等变量来访问\(
和\)
中的内容。 - 在替换命令
s///
中可以使用函数表达式来书写替换内容,格式为:s/替换字符串/\=函数式
- 在函数式中可以使用
submatch(1)
、submatch(2)
等来引用\1
、\2
等的内容,而submatch(0)
可以引用匹配的整个内容。