我想要执行以下操作的bash shell
保存并退出文件
bashpromt# cat mybash.sh
echo "about to open a file"
vim file.txt #I need to use vim application to open a file
#now write something into file.txt
#close the that file.
echo "done."
Run Code Online (Sandbox Code Playgroud)那可能吗?我找到了类似vim脚本的东西,但不知道如何使用它.或者像"HERE"doc这样的东西可以用于此吗?
编辑:我需要验证vim编辑器在我们的文件系统上工作正常.所以我需要编写调用vim的脚本并执行一些命令并关闭它.我的要求不适合做"回声"的东西"> file.txt".我必须使用vim打开文件.
Kon*_*rak 16
ex
是命令行版本vi
,在脚本中更容易使用.
ex $yourfile <<EOEX
:%s/$string_to_replace/$string_to_replace_it_with/g
:x
EOEX
Run Code Online (Sandbox Code Playgroud)
Ben*_*oit 10
Vim有几种选择:
-c
=>传递ex命令.示例:vim myfile.txt -c 'wq'
强制文件的最后一行被换行(除非binary
由脚本以某种方式设置)-s
=>播放录制的脚本-W
.例如,如果您的文件包含ZZ
,vim myfile.txt -s the_file_containing_ZZ
则将执行与以前相同的操作.还要注意,调用as时ex
,vim将以ex模式启动; 你可以试试ex my_file.txt <<< wq
你问过如何通过vim将"某些东西"写入文本文件中,但尚无答案.
要插入文字:
ex $yourfile <<EOEX
:i
my text to insert
.
:x
EOEX
Run Code Online (Sandbox Code Playgroud)
:i
进入插入模式.所有后续行都插入文本,直到.
看到它自己出现在它自己的行上.
以下是搜索和插入的方法.你可以做一些事情,比如:
ex $yourfile <<EOEX
:/my search query\zs
:a
my text to insert
.
:x
EOEX
Run Code Online (Sandbox Code Playgroud)
这将找到与指定的正则表达式匹配的第一个选择:/
,将光标放在指定的位置\zs
,并在光标后输入插入模式.
您可以移动\zs
以实现不同的结果.例如:
ex $yourfile <<EOEX
:/start of match \zs end of match
:a
my text to insert
.
:x
EOEX
Run Code Online (Sandbox Code Playgroud)
这会将"匹配结束开始"的第一次出现更改为"匹配我的文本以插入匹配结束".
如果您希望在关键字之间允许搜索任意数量的空白,请使用\_s*
.例如,搜索返回0的函数::/\_s*return\_s*0}