我有一组需要相同编辑的多个文件,我正在尝试创建一个用于在vi中编辑它们的bash脚本,但是我不知道如何在脚本中使用vi进行编辑?任何建议都会有所帮助。
答案 0 :(得分:3)
我强烈建议您使用sed
或awk
,这两个程序都使用正则表达式来选择和处理文本。
但是这里也是如何使用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!