Запуск vi в скрипте bash и выполнение команд vi для редактирования другого файла
поэтому я сделал скрипт, который собирает данные из разных файлов:
#!/bin/bash
mkdir DATAPOOL""
grep achi *out>runner
grep treat *out>>runner
cat runner | grep Primitive *gout | grep '= '|awk '{print ,}' > CellVolume"".txt
cat runner | grep ' c ' *gout | grep 'Angstrom '|awk '{print ,}' > Cellc"".txt
cat runner | grep 'Final energy ' *gout |awk '{print ,}' > CellEnergy"".txt
etc etc
cat runner |awk '{print "~/xtlanal",," > ",}' >runner2
vi runner2
:1,$s/gout:/xtl/
:1,$s/gout:/dat/
:wq
source runner2
grep Summary *dat | grep 'CAT-O ' |awk '{print ,}' > AVE_NaO_"".txt
mv *txt DATAPOOL""
таким образом, я получаю все необходимые текстовые файлы при запуске без vi части, и поэтому я знаю, что все это работает. Кроме того, когда я запускаю его с командами vi, он просто останавливается в команде vi, а затем я могу вручную ввести 3 команды, и я получаю правильные результаты. Я борюсь с тем, что не могу заставить vi выполнять команды самостоятельно, поэтому Я могу просто выполнить файл несколько раз в разных каталогах и не нужно вручную вводить команды снова и снова.
любая помощь была бы весьма признательна.
Ура
2 ответов
для задач редактирования скриптов вы можете использовать ed
вместо vi:
ed runner2 <<'END'
1,$s/gout:/xtl/
1,$s/gout:/dat/
w
q
END
для глобального линейно-ориентированного поиска и замены,sed
- это хороший выбор:
sed -i 's/gout:/xtl/; s/gout:/dat/' runner2
что-то вроде этого, как bash-скрипт:
#!/bin/bash
vi filename.txt -c ':g/^/m0' -c ':wq'
где-c выполнить команду. Здесь команда состоит в том, чтобы изменить строки в textfile. После завершения :wq для сохранения и выхода. (man vi, чтобы получить больше о -c)