Bash:迭代地更改文件中的一行并读取传递file.txt到程序

时间:2014-01-04 04:35:33

标签: java bash command-line sed

我尝试制作这个非常简单的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

非常感谢!!!

2 个答案:

答案 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

非常感谢您的回答评论和提示。