iterando script bash para ciclo em um arquivo

0

Eu tento fazer este programa bash muito simples que deve fazer as seguintes operações:

  1. modificar um arquivo java n vezes: toda vez que eu preciso alterar uma única palavra em uma única linha do arquivo (a linha é 11) Eu sei que há o seguinte comando que substitui uma única palavra em uma linha particular de um programa com outro:

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

    se eu fizer o comando acima eu posso modificar apenas uma vez o arquivo.java porque na segunda iteração do ciclo for eu não tenho a mesma palavra que na primeira iteração: eu começo com 1 na linha 11, do que na a primeira iteração eu mudo com $n (que é igual a 2), mas agora COMO eu posso modificar o comando sed para mudar novamente a palavra (que agora é igual a 2) para ter , por exemplo, 3 na 11ª linha?

  2. compile o arquivo java: ok;

  3. modifique um arquivo.txt: novamente o mesmo problema que em 1) Eu quero mudar uma palavra em uma linha iterativamente com um ciclo para ou algo assim;

  4. passá-lo para um arquivo executável: este é o segundo problema. Eu modifiquei o arquivo param.txt e agora quero lê-lo em um arquivo executável chamado exec . Se eu fizer isso a partir do terminal, devo iniciar o exec. programa com o comando ./exec e depois disso eu devo escrever da tela o nome do arquivo.txt. Agora é possível iniciar um programa do bash e ler com ele o arquivo.txt? Eu tento com:

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

esse script deve alterar a linha 13 de Zero para $ n em param.txt como posso iniciar o programa exec com o comando ./exec com o arquivo param.txt específico.

#!/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

muito obrigado !!!

    
por Panichi Pattumeros PapaCastoro 04.01.2014 / 05:31

1 resposta

0

  1. Em vez de editar o arquivo no lugar:

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

    copie-o para um arquivo de modelo, diga IC_masslessPlanetesimal.java.template e crie uma nova versão dele para cada n:

    sed "11s/1/$n/" < IC_masslessPlanetesimal.java.template > IC_masslessPlanetesimal.java
    
  2. O mesmo que 1

  3. Sim, ./exec < param.txt está correto. Isso não funciona?

por 04.01.2014 / 12:47