vim - 删除所有以datetime开头且不包含类名

时间:2016-09-11 05:58:49

标签: vim sed

我想知道如何删除所有以字符串12/25/2015开头的行,除非它们包含字符串' ApplicationMaster'。我希望不要删除不以12/25/2015开头的行。

在sed中我可以执行此操作cat file.txt | sed '/^12\/25\/2015/ { /ApplicationMaster/!d }但是在vim中我无法找出一般说法"对于与给定正则表达式匹配的所有行,请应用此子/删除模式它"

在vim中有没有相同的方法呢?

3 个答案:

答案 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 "/