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
の代わりに任意の単語を使用できることも学びました。私の問題は、行をMatlab
内の別のfor loop
初期化子に置き換えるという望ましい効果の代わりに、このスクリプトは行を削除せず、5行目の最後に文字列を追加しないことです。参考のために、FFT.mファイルも追加しました。以前の質問の抽象化によりご不便をおかけしましたことをお詫び申し上げます。別のプログラムを使用して目的の効果を達成することもできますが、ex
またはvim
で達成できない理由について知りたいことに注意してください。 Matlabスクリプトについては、 ここ をクリックしてください。
ex
とEOEX
コンストラクトを使用してtest_file
というファイルの5行目を「helloworld」に変更するには(これにより、「ヒアドキュメント」を意味していると思います) :
ex test_file << EOEX
5c
hello world
.
wq
EOEX
上記はed
でも可能ですが、POSIX ed
はwq
コマンドをサポートしていないことに注意してください。代わりに、w
とq
を別々の行に配置します。
sed
(-i
オプションをサポートするバージョン)の使用は少し簡単です。
sed -i '15 c hello world' test_file