0

model_c2.cpp という名前の cpp コードを含むファイルがあります。コード内の行の 1 つは次のとおりです。

double n=0.0;

bash と sed を使用して、1.0 から 50.0 までループさせたいと考えています。次のループを試しましたが、うまくいきません。私が間違っていることは何ですか?

#!/bin/bash

for i in $(seq 1 50);
do
    sed -i -e 's/n=*/n=$i.0/g' $model_c2.cpp    
done
4

2 に答える 2

4
  • シェル変数を展開するには二重引用符を使用してください
  • .*また、グロブではなく正規表現が必要です*

    sed -i -e "s/n=.*/n=$i.0;/g" $model_c2.cpp  
    
于 2013-11-12T21:02:38.683 に答える
0

nこれらの値のそれぞれに順番に割り当てられたプログラムを実行またはコンパイルしますか? 一意の名前でファイルを保存したいですか?

スクリプトは、この時点で置換した最後の値のみを「保持」するため、別の名前で保存しない限り、ループに入れる必要はないようです。

$modelまた、モデルだけでなく、なぜモデルを持っているのですか? その変数は別の場所で定義されていますか?

50 個の異なる cpp ファイルを異なる名前で保存しようとしている場合は、保存$i先のファイル名を入力してください。

for i in $(seq 1 50);
do 
    sed -e "s/double n=.*/double n=$i.0;/" model_c2.cpp > model_$i_c2.cpp
done

model_1_c2.cppこれにより、 ...という名前の50個のファイルが作成されますmodel_50_c2.cpp

every の検索は少し危険だと思いますn=.ANY行を.で終わる他の変数に置き換えるからnです. doubleこれに対する少しの保証として、バックインを追加しました...

于 2013-11-12T21:09:28.987 に答える