如何在不打开文件的情况下在vi中应用正则表达式命令

时间:2014-01-18 07:37:10

标签: bash vim editor vi

我有一组需要相同编辑的多个文件,我正在尝试创建一个用于在vi中编辑它们的bash脚本,但是我不知道如何在脚本中使用vi进行编辑?任何建议都会有所帮助。

2 个答案:

答案 0 :(得分:3)

我强烈建议您使用sedawk,这两个程序都使用正则表达式来选择和处理文本。

但是这里也是如何使用vim来实现的:

Vim有一个ex模式(也就是命令行版本),可以解决这个问题,并且在脚本中更容易使用。从这个answer:

中获取解决方案

您可以在bashscript中包含以下内容:

ex $yourfile <<EOEX
  :%s/$string_to_replace/$string_to_replace_it_with/g
  :x
EOEX

例如:

ex file.txt << EOEX
  :%s/hello/world/g
  :x
EOEX

或者您可以使用-c选项将ex命令传递给vim。 例如:

vim file.txt -c ':%s/hello/world/g' -c 'wq'

答案 1 :(得分:1)

如果你想做一个:s命令,那么你可以使用sed,或者你可以使用vim -c作为@fnatic_shank建议。对于更复杂的脚本,您可以使用-S script.vim而不是几个-c参数。我喜欢用

$ vim -e -s -N -V0vim.log -S script.vim infile.txt

请参阅-N-V-S的帮助,尤其是

:help -s-ex

包含警告

  

如果Vim似乎被卡住,请尝试输入“qa!”。你没有   得到一个提示,因此你看不到Vim在等你输入   东西。

(我在测试我的答案时遇到了这个问题。我在vim中打开infile.txt,所以当我尝试按照上面的方式启动一个新的vim时,它询问如何处理现有的交换文件。)如果你想发送文件到标准输出,然后你可能在script.vim的末尾有这两行:

g/^
silent q!