vim计数不包含模式的行数
给定下面的CSV文件,如何使用vim计算不包含以下内容的行数:vim计数不包含模式的行数,vim,Vim,给定下面的CSV文件,如何使用vim计算不包含以下内容的行数:fff或sss 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 您可以使用%从vim调用命令行的权限。因此,请键入以下内容并按enter键。它将带你到vim之外给你答案。再次按enter
fff
或sss
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
您可以使用%从vim调用命令行的权限。因此,请键入以下内容并按enter键。它将带你到vim之外给你答案。再次按enter键,您将与之前一样返回vim
:%!grep -c -v -P "fff|sss"
^
锚定在行的开头,因此它匹配以fff或sss开头的行。只有在方括号内([^a]
匹配除a
之外的任何内容时,它才是一种负数
您正在寻找类似以下内容:
%s/\v^((fff|sss)@!.)*$//gn
更多信息请访问:help@代码>
另一种避免复杂正则表达式的解决方案是使用global命令在所有与模式不匹配的行上增加一个变量:
let var=0
v/\v(sss|fff)/let var+=1
echo var
编辑:
可以使用以下全局命令删除所有行:
g/\v(sss|fff)/d
谢谢,如果我想删除包含fff或sss的所有行,您是否也可以帮助我执行此操作:v/\v^((fff | sss)@!);$/d
doesg/\v(sss | fff)/d
执行相同操作以删除包含上述内容的所有行?:g
和:v
是相同的。参见:help:v
是,因此我想知道g/\v(sss | fff)/d
的@mMontu答案是否等同于g/\v(sss | fff)/d
:g
和:g代码>是补充。第一个将删除包含“sss”或“fff”的所有行。第二个将删除所有不包含这些字符串的行。