我在想如何刪除所有以字符串12/25/2015
開頭的行,除非它們包含字符串'ApplicationMaster'。我想要不以12/25/2015
開頭的行不被刪除。vim - 刪除所有不包含類名的日期時間開始的行
在sed我可以做到這一點cat file.txt | sed '/^12\/25\/2015/ { /ApplicationMaster/!d }
,但在vim中,我無法弄清楚「對於給定的正則表達式匹配的所有行,在其上應用這個子/刪除模式」。
在vim中有這樣做的等效方法嗎?
我在想如何刪除所有以字符串12/25/2015
開頭的行,除非它們包含字符串'ApplicationMaster'。我想要不以12/25/2015
開頭的行不被刪除。vim - 刪除所有不包含類名的日期時間開始的行
在sed我可以做到這一點cat file.txt | sed '/^12\/25\/2015/ { /ApplicationMaster/!d }
,但在vim中,我無法弄清楚「對於給定的正則表達式匹配的所有行,在其上應用這個子/刪除模式」。
在vim中有這樣做的等效方法嗎?
一種方法用Vim做到這一點:
:v /ApplicationMaster/ s!\m^12/25/2015.*\n!!
的另一種方式,與負前瞻:
:g -\m^12/25/2015\(.*\<ApplicationMaster\>\)\@!- d
你可以簡單地通過你的sed
命令的稍微改變版本上運行您的緩衝區:
:%!sed '/^12\/25\/2015/ { /ApplicationMaster/\!d }'
這是一個很酷的技巧有。謝謝! – anthonybell
Vim附帶:LogiPat
這將允許boole一種模式的邏輯。使用: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
@anthonybell它使得正則表達式獨立於'magic'選項。有關詳細信息,請參閱':h/\ m'和':h/magic'。 –