用包含变量的新行替换行

时间:2015-09-05 15:30:00

标签: bash sed

这是我的代码:

for num in {0001..1000}; do

   cd ${num}_1000_solar
   sed -i '827s/.*/ if(BigUni==1) fp910=fopen("biguni_${num}.dat","w");/' binary.c
   gcc singl.c binary.c -lm
   cd ..
done

sed命令将'{num}'写入文件,而不是从循环中输入适当的值。如何用字符串+某个变量替换一行?

干杯!

1 个答案:

答案 0 :(得分:2)

如果shell要解释${num},它必须是双引号(或引号外),而不是单引号。

for num in {0001..1000}
do
    (
    cd ${num}_1000_solar
    sed -i '827s/.*/ if (BigUni==1) fp910=fopen("biguni_'"${num}"'.dat","w");/' binary.c
    gcc singl.c binary.c -lm
    )
done

有1000个程序,您在源代码中更改文件名并重新编译(每次a.out)是滥用C.您应该将文件名作为参数传递给程序。换句话说,练习只是必要的,因为设置存在严重缺陷。

另外,作为一般规则,我可以避免cd subdir稍后在脚本中使用cd ..。通过运行子shell(修订后的脚本中的()),调用shell进程不受目录更改的影响。最终,它更可靠。