0

我有一个名为 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
4

2 回答 2

4
  • 请使用双引号来扩展 shell 变量
  • 你也需要正则表达式,.*而不是 glob*

    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

这将使 50 个文件称为model_1_c2.cpp...model_50_c2.cpp

我认为搜索 everyn=有点危险,因为它会用任何其他以n. 我已经添加了double背面作为对此的保证......

于 2013-11-12T21:09:28.987 回答