Bash

是否可以在 VIM 或 EX 中通過 bash 腳本替換文件中的特定行?

  • December 24, 2014

我想通過使用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

我做了一些研究並了解到通常EOF(文件結尾)here scripts 用於I/O重定向到特定命令的標準輸入(在我的情況下是ex)。我還了解到,只要開始和結束關鍵字相同,就可以使用任何單詞來代替EOF. for loop我的問題是,在此腳本中用另一個初始化程序替換該行而不是期望的效果Matlab不會刪除該行並將字元串附加到第五行的末尾。出於參考目的,我還添加了我的 FFT.m 文件。對於之前我的問題的抽象性給您帶來的不便,我深表歉意。請注意,我也願意使用另一個程序來達到預期的效果,但很好奇為什麼它不能在exvim。請點擊此處獲取 Matlab 腳本。

使用和構造更改名為test_file“hello world”的文件的第 5 行(我假設您的意思是“here 文件”):ex``EOEX

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

上面也可以使用ed,但請注意 POSIXed不支持該wq命令。而是將wandq放在單獨的行上。

使用sed(支持該-i選項的版本)稍微簡單一些:

sed -i '15 c hello world' test_file

引用自:https://unix.stackexchange.com/questions/175758