1

私はこのスクリプト bash を作成しました。これは、異なる番号を持つ特定の行 (つまり、「9.0E-8」...) を含むファイルを書き込む必要があるため、for サイクルの後に「9.0E-」を含む最後のファイルが必要です。 11」は「9.0E-7」を尊重。

#!/bin/sh

touch IC_masslessPlanetesimal.java

for n in "9.0E-8" "9.0E-8" "9.0E-9" "9.0E-10" "9.0E-11"
do  
sed -i "21s/9\.0E-7/$n/" IC_masslessPlanetesimal.java
javac IC_masslessPlanetesimal.java
java IC_masslessPlanetesimal
done

ここで、スクリプトは file.java を再編集、コンパイル、実行する必要があり、コードはエラーなしで実行されます。問題は次のとおりです。file.java の 21 行目 (scrpt を変更する必要がある番号があります) を調べると、scrpt は最初の for-cycle のみを編集します。 1 つ ("9.0E-9" など...) スクリプトは最後の 1 つを見つけることができません!

最初のステップ) 9e-7 -> 9e-8: スクリプトは 9e-7 を見つけ、n=9e-8 に置き換えます 2 番目のステップ) 9e-8 -> 9e-9: スクリプトは 9e-8 文字列を見つけられず、変更できません!!!

したがって、この変更を組み込むために for オプションを書き直す必要があります。

推測してください。:(

4

2 に答える 2

2

sedコマンドの構文は次のとおりです。

[ address(es) ] command

21 はアドレス、つまり行番号として解釈されます。/したがって、コマンドとして扱われるため、エラーが発生します。

あなたは何をしようとしているのですか?21 行目の 9.0e7 を $n に置き換えたい場合は、

21s/9\.0E7/$n/
于 2013-07-09T16:22:36.333 に答える