Запуск 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)