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 来完成这个简单的任务。
我正在使用 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 来完成这个简单的任务。