我尝试制作这个非常简单的bash程序,必须进行以下操作:
1)修改文件java n次:每次我必须更改文件的一行中的单个单词(行为11)我知道有以下命令替换一个程序的特定行中的单个单词与另一个单词:
sed -i "11s/1/$n/" IC_masslessPlanetesimal.java
如果我执行上述命令,我只能修改一次file.java,因为在for循环的第二次迭代中我没有第一次迭代中的相同的单词:我从第11行开始,而不是第一次迭代我用$n
改变(等于2),但现在 HOW 我可以修改sed
命令再次改变这个词(现在等于2)例如,在第11行中有3个?
2)编译java文件:没关系;
3)修改file.txt:再次出现与1)相同的问题我希望用for循环或类似的东西迭代地改变一行中的单词;
4)将其传递给可执行文件:这是第二个问题。我修改了param.txt文件,现在我想把它读成一个名为 exec 的可执行文件。如果我从终端执行此操作,我必须启动执行程序。使用命令./exec
编程,之后我必须在屏幕上写入file.txt名称。现在可以从bash启动一个程序并用它读取file.txt吗?我试着用:
sed -i "13s/Zero/$n/" param.txt
./exec < param.txt
该脚本必须将第13行从零更改为$ pa中的$ n 如何我可以使用命令./exec
和特定的param.txt文件启动exec程序。 / p>
#!/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
非常感谢!!!
答案 0 :(得分:2)
使用变量来跟踪前n个值。它将涵盖前3个点。
#!/bin/bash
n=0
prev=1
for n in "2" "3"
do
sed -i "11s/$prev/$n/" IC_masslessPlanetesimal.java
javac IC_masslessPlanetesimal.java
java IC_masslessPlanetesimal
sed -i "13s/Zero/$prev/" param.txt
echo "param.txt" | ./exec
prev=$n
done
答案 1 :(得分:0)
我以一种非常简单的方式解决问题(但不是那么正式):
我转到file.f90并重新定义它,所以我将shell命令更改为file.txt,该文件在编译时必须读取。
现在bash非常简单:
#!/bin/bash
touch IC_masslessPlanetesimal.java
touch param.in
m=1
n=0
for n in "2" "3"
do
sed -i "11s/$m/$n/" IC_masslessPlanetesimal.java
javac IC_masslessPlanetesimal.java
java IC_masslessPlanetesimal
sed -i "13s/$m/$n/" param.in
./swifter_symba_omp # now i just launch the modify version of ./exec that read the files in which i declare the input to the ./exec
m=$n
done
非常感谢您的回答评论和提示。