ітераційний сценарій bash для циклу у файлі


0

Я намагаюся зробити цю дуже просту програму bash, яка повинна робити наступні операції:

  1. змінити файл Java n разів: кожен раз, коли я повинен змінити одне слово в одному рядку файлу (рядок - 11), я знаю, що є наступна команда, яка замінює одне слово в певному рядку програми на інший :

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

    якщо я виконую вищевказану команду, я можу змінити файл один раз лише один раз, тому що в другій ітерації циклу у мене немає того самого слова, як у першій ітерації: я починаю з 1 у рядку 11, ніж у ітерації кулака Я змінююсь на $n(що дорівнює 2), але тепер ЯК Я можу змінити sedкоманду, щоб знову змінити слово (яке зараз дорівнює 2), щоб мати, наприклад, 3 у 11-му рядку?

  2. компілюйте файл java: це нормально;

  3. змінити file.txt: знову та ж проблема, що і в 1) Я хочу змінити слово в рядку ітеративно з циклом або щось подібне;

  4. передайте його у виконуваний файл: це друга проблема. Я змінив файл param.txt і тепер хочу прочитати його у виконуваний файл під назвою exec . Якщо я це роблю з терміналу, я повинен запустити exec. програма з командою ./execі після цього я повинен написати з екрана ім'я файлу.txt. Тепер можна запустити програму з bash і прочитати з нею файл file.txt? Я намагаюся:

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

цей сценарій повинен змінити рядок 13 з Zero на $ n у param.txt, як я можу запустити програму exec за допомогою команди ./execз певним файлом param.txt.

#!/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
чому б ти просто не змінив свою програму java, щоб замість неї прийняти аргументи! Тоді вам не потрібно робити цей злом! У вашому сценарії просто випишіть nу файл, і наступного разу, коли ви запустите, ви catпереведете файл у змінну, додасте 1 до значення і запишете його назад у файл. Потім запустіть програму java, передаючи аргумент.
Пеон

Те, що ви робите (хоч і зайво складне), повинно працювати чудово. Яка проблема є у вас?
тердон

Відповіді:


0
  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правильно. Це не працює?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.