是否可以在 VIM 或 EX 中通过 bash 脚本替换文件中的特定行?

Ves*_*nog 2 bash vim vi ex

我想通过使用EOEX构造修改文件中的特定行,例如第 5 行,如何实现我的目标?我用来实现我的目的的代码片段如下:

#!/bin/bash
S=0.030
F=0.150
N=30
DIFF=`echo "scale=3; $F - $S" | bc -l`
dw=`echo "scale=3; $DIFF / $N" | bc -l`
is=`echo "scale=3; $S / $dw" | bc -l`
if=`echo "scale=3; $F / $dw" | bc -l`
ex ~/Desktop/Dropbox/MATLAB/FFT.m  <<EOEX
  :5s/for*/for i = $S:$dw:$F/g
  :x
EOEX
Run Code Online (Sandbox Code Playgroud)

我做了一些研究并了解到通常EOF(文件结尾)here scripts 用于I/O重定向到特定命令的标准输入(在我的情况下是ex)。我还了解到,只要开始和结束关键字相同,任何单词都可以代替EOF. 我的问题是,for loopMatlab此脚本中用另一个初始化程序替换该行的预期效果不会删除该行并将字符串附加到第五行的末尾。出于参考目的,我还添加了我的 FFT.m 文件。对于之前我的问题的抽象性给您带来的不便,我深表歉意。请注意,我也愿意使用另一个程序来达到预期的效果,但很好奇为什么不能在exvim。请单击此处获取 Matlab 脚本。

Gra*_*eme 6

一个叫文件的更改行5test_file为“世界你好”使用exEOEX构造(由我假定你的意思是“这里的文档”):

ex test_file << EOEX
5c
hello world
.
wq
EOEX
Run Code Online (Sandbox Code Playgroud)

上面也可以使用ed,但请注意 POSIXed不支持该wq命令。而是将wq放在单独的行上。

使用sed(支持该-i选项的版本)要简单一些:

sed -i '15 c hello world' test_file
Run Code Online (Sandbox Code Playgroud)