vim: 删除命令行中不匹配的行

vim: deleting non-matching lines in command line

我正在使用 vim 在命令行中解析文件(我是 运行ning gentoo linux):

其中一个命令无法正常工作 [我认为] 它应该:

vim -c "v/pattern/d | wq" file

出于某种原因,这并不是在添加 | wq 时删除没有指定模式的行。如果我用 vim 和 运行 相同的命令打开文件,它就可以工作。如果我在没有 | wq 的命令行中 运行 它工作。

为什么这不起作用?

我建议你为此使用 sed:

sed -i '/pattern/d' ./file

原因是Vim将此视为:v/pattern/(d | wq),请参阅:help :bar进行解释。为避免这种情况,请将 :v 包装在 :execute:

vim -c "exe 'v/pattern/d' | wq" file

或者,更简单,将其作为两个单独的命令提交:

vim -c "v/pattern/d" -c "wq"  file

PS:当然,@Bogdan 有道理;你不需要 Vim 来完成这个简单的任务。