vim count不包含模式的行数

时间:2015-08-04 18:37:00

标签: vim

如果下面是CSV文件,我如何使用vim来计算不包含的行数:fffsss

aaa bbb ccc ddd eee, 3221
aaa ddd eee fff, 3222
fff ddd sss www aaa, 3223
ggg www qqq, 3224
sss aaa vvv, 3225

我有这个,但它只匹配一些而不是全部

%s/\v^(fff|sss)//gn

2 个答案:

答案 0 :(得分:3)

^位于该行开头的锚点,因此它与以开头的行匹配。只有在方括号内{[^a]匹配除a之外的任何内容时,它才是负面的。

你正在寻找这样的东西:

%s/\v^((fff|sss)@!.)*$//gn

:help @!的更多信息。

避免复杂正则表达式的另一个解决方案是使用全局命令在与模式不匹配的所有行上递增变量:

let var=0
v/\v(sss|fff)/let var+=1
echo var

修改

您可以使用以下全局命令删除所有行:

g/\v(sss|fff)/d

答案 1 :(得分:2)

您可以使用%从vim调用命令行的权限。因此,输入以下内容并按Enter键。它将带你到vim外给你答案。再次按回车键,你就像以前一样回到了vim。

:%!grep -c -v -P "fff|sss"