vim-删除所有以datetime开头且不包含类名的行
我想知道如何删除所有以字符串开头的行,除非它们包含字符串“ApplicationMaster”。我希望不要删除不以vim-删除所有以datetime开头且不包含类名的行,vim,sed,Vim,Sed,我想知道如何删除所有以字符串开头的行,除非它们包含字符串“ApplicationMaster”。我希望不要删除不以12/25/2015开头的行 在sed中,我可以这样做cat file.txt | sed'/^12\/25\/2015/{/ApplicationMaster/!d},但在vim中,我无法找到一种通用的方式来表示“对于与给定正则表达式匹配的所有行,在其上应用此sub/delete模式” 在vim中是否有类似的方法来执行此操作?您只需通过稍微修改的sed命令来运行缓冲区: :%!se
12/25/2015
开头的行
在sed中,我可以这样做cat file.txt | sed'/^12\/25\/2015/{/ApplicationMaster/!d}
,但在vim中,我无法找到一种通用的方式来表示“对于与给定正则表达式匹配的所有行,在其上应用此sub/delete模式”
在vim中是否有类似的方法来执行此操作?您只需通过稍微修改的
sed
命令来运行缓冲区:
:%!sed '/^12\/25\/2015/ { /ApplicationMaster/\!d }'
使用Vim执行此操作的一种方法:
:v /ApplicationMaster/ s!\m^12/25/2015.*\n!!
另一种方法是采用消极前瞻:
:g -\m^12/25/2015\(.*\<ApplicationMaster\>\)\@!- d
:g-\m^12/25/2015\(.\\\)\@D
Vim附带了:LogiPat
,它将允许带有模式的布尔逻辑。使用:LogiPat
将设置搜索寄存器@/
。设置搜索模式后,您可以轻松使用:g
和:d
删除有问题的行
:LogiPat "^12/12/2015"&!"ApplicationMaster"
:g//d
注意::LogiPat
用于此模式的正则表达式最终为:\%(.*^12/12/2015.*\&^\%(\%(ApplicationMaster\)\@!\)*$\)
有关更多帮助,请参阅:
:h logipat-man
:h :g
:h :d
:h "/
\m
的作用是什么?@anthonybell它使regexp独立于magic
选项。有关详细信息,请参见:h/\m
和:h/magic
。