我想知道如何删除所有以字符串12/25/2015
开头的行,除非它们包含字符串' ApplicationMaster'。我希望不要删除不以12/25/2015
开头的行。
在sed中我可以执行此操作cat file.txt | sed '/^12\/25\/2015/ { /ApplicationMaster/!d }
但是在vim中我无法找出一般说法"对于与给定正则表达式匹配的所有行,请应用此子/删除模式它"
在vim中有没有相同的方法呢?
答案 0 :(得分:4)
使用Vim的一种方法:
:v /ApplicationMaster/ s!\m^12/25/2015.*\n!!
另一种方式,负面前瞻:
:g -\m^12/25/2015\(.*\<ApplicationMaster\>\)\@!- d
答案 1 :(得分:1)
您可以通过略微更改的sed
命令版本来运行缓冲区:
:%!sed '/^12\/25\/2015/ { /ApplicationMaster/\!d }'
答案 2 :(得分:0)
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 "/