在文件中迭代 bash 脚本以进行循环

在文件中迭代 bash 脚本以进行循环

我尝试制作这个非常简单的 bash 程序,它必须执行以下操作:

  1. 修改文件 java n 次:每次我都必须更改文件某一行(该行是 11)中的单个单词,我知道有以下命令可以用另一个单词替换程序特定行中的单个单词:

    sed -i "11s/1/$n/" IC_masslessPlanetesimal.java
    

    如果我执行上述命令,我只能修改一次 file.java,因为在 for 循环的第二次迭代中,我没有与第一次迭代相同的字:我在第 11 行以 1 开始,然后在第一次迭代中我进行了更改$n(等于 2),但现在如何我可以修改sed命令以再次更改单词(现在等于 2),例如,第 11 行中的 3?

  2. 编译文件java:没问题;

  3. 修改一个文件.txt: 同样的问题与1)我想用for循环或类似的东西迭代地改变一行中的某个单词;

  4. 将其传递给可执行文件:这是第二个问题。我已经修改了 param.txt 文件,现在我想将其读入名为执行。如果我从终端执行此操作,我必须使用命令启动 exec。程序./exec,然后我必须从屏幕上写入 file.txt 名称。现在是否可以从 bash 启动程序并使用它读取 file.txt?我尝试:

    sed -i "13s/Zero/$n/" param.txt
    ./exec < param.txt   
    

该脚本必须将 param.txt 中的第 13 行从零更改为 $n如何./exec我可以使用带有特定 param.txt 文件的命令启动 exec 程序。

#!/bin/bash

n=0
for n in "2" "3" 
do
  sed -i "11s/1/$n/" IC_masslessPlanetesimal.java
  javac IC_masslessPlanetesimal.java  
  java IC_masslessPlanetesimal
 sed -i "13s/Zero/$n/" param.txt
 ./exec < param.txt   
done

多谢 !!!

答案1

  1. 无需就地编辑文件:

    sed -i "11s/1/$n/" IC_masslessPlanetesimal.java
    

    将其复制到模板文件中,例如 IC_masslessPlanetesimal.java.template,然后为每个 n 创建一个新版本:

    sed "11s/1/$n/" < IC_masslessPlanetesimal.java.template > IC_masslessPlanetesimal.java
    
  2. 与 1 相同

  3. 是的,./exec < param.txt正确。这可行吗?

相关内容