Bash
是否可以在 VIM 或 EX 中通過 bash 腳本替換文件中的特定行?
我想通過使用
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 文件。對於之前我的問題的抽象性給您帶來的不便,我深表歉意。請注意,我也願意使用另一個程序來達到預期的效果,但很好奇為什麼它不能在ex
或vim
。請點擊此處獲取 Matlab 腳本。
使用和構造更改名為
test_file
“hello world”的文件的第 5 行(我假設您的意思是“here 文件”):ex``EOEX
ex test_file << EOEX 5c hello world . wq EOEX
上面也可以使用
ed
,但請注意 POSIXed
不支持該wq
命令。而是將w
andq
放在單獨的行上。使用
sed
(支持該-i
選項的版本)稍微簡單一些:sed -i '15 c hello world' test_file