如何使用bash脚本替换文件中的变量名?

时间:2013-11-12 21:00:43

标签: bash sed

我有一个名为model_c2.cpp的cpp代码文件。 代码中的一行是:

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

2 个答案:

答案 0 :(得分:4)

  • 请使用双引号展开shell变量
  • 您还需要正则表达式.*,而不是全局*

    sed -i -e "s/n=.*/n=$i.0;/g" $model_c2.cpp  
    

答案 1 :(得分: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

这将生成50个名为model_1_c2.cpp ... model_50_c2.cpp

的文件

我认为搜索每个n=有点危险,因为它会用任何其他以n结尾的变量替换任何一行。我已经添加double作为对此的一点保证......