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

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

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

#!/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

我做了一些研究,发现通常EOF使用 (文件结束)here scriptsI/O重定向到特定命令的标准输入(在我的情况下是ex)。我还了解到,只要开始和结束关键字相同,就可以使用任何词代替。我的问题是,除了所需的效果(即在此脚本中用另一个初始化程序EOF替换行)之外,它不会删除该行并在第五行的末尾附加字符串。为了参考,我还添加了我的 FFT.m 文件。对于我之前的问题抽象性造成的不便,我深表歉意。请注意,我也愿意使用其他程序来实现所需的效果,但很好奇为什么它无法在或中实现。请单击for loopMatlabexvim这里为 Matlab 脚本。

答案1

要使用和结构将名为test_file“hello world”的文件的第 5 行更改为(我认为您的意思是“此处文档”):exEOEX

ex test_file << EOEX
5c
hello world
.
wq
EOEX

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

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

sed -i '15 c hello world' test_file

相关内容