我尝试制作这个非常简单的 bash 程序,它必须执行以下操作:
修改文件 java n 次:每次我都必须更改文件某一行(该行是 11)中的单个单词,我知道有以下命令可以用另一个单词替换程序特定行中的单个单词:
sed -i "11s/1/$n/" IC_masslessPlanetesimal.java
如果我执行上述命令,我只能修改一次 file.java,因为在 for 循环的第二次迭代中,我没有与第一次迭代相同的字:我在第 11 行以 1 开始,然后在第一次迭代中我进行了更改
$n
(等于 2),但现在如何我可以修改sed
命令以再次更改单词(现在等于 2),例如,第 11 行中的 3?编译文件java:没问题;
修改一个文件.txt: 同样的问题与1)我想用for循环或类似的东西迭代地改变一行中的某个单词;
将其传递给可执行文件:这是第二个问题。我已经修改了 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
无需就地编辑文件:
sed -i "11s/1/$n/" IC_masslessPlanetesimal.java
将其复制到模板文件中,例如 IC_masslessPlanetesimal.java.template,然后为每个 n 创建一个新版本:
sed "11s/1/$n/" < IC_masslessPlanetesimal.java.template > IC_masslessPlanetesimal.java
与 1 相同
是的,
./exec < param.txt
正确。这可行吗?