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

时间:2015-03-19 15:25:52

标签: linux parsing vim command-line

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

其中一个命令不起作用[我认为]它应该:

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

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

为什么这不起作用?

2 个答案:

答案 0 :(得分:3)

原因是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:当然,@博格丹有一个观点;你不需要Vim来完成这个简单的任务。

答案 1 :(得分:1)

我建议您使用 sed

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