Изменение скриптом строки в файле (bash, awk, sed, perl...)

программирование Linux perl bash sed

Есть два скрипта. Скрипт 1 записывает результаты своей работы в виде переменных в файл, откуда их загружает скрипт 2.
Сейчас у меня, во время запуска скрипта, файл полностью очищается, а потом туда записываются данные. Хочу сделать, чтобы скрипт менял только соответствующие строки, оставляя нетронутыми другие.
Как я понимаю, с помощью чистого bash нельзя изменить одну строку. Можно загрузить файл целиком, изменить нужное место и перезаписать. Причем либо делать это в конце скрипта, или перезаписывать каждый раз, как меняется одна из 4х переменных. В awk я тоже не нашел, как это сделать.
sed может изменить одну строку с помощью ключа -i, но версия у меня на сервере не поддерживается ключ -i и поэтому он тоже отпадает.
С этим заданием пока что справился perl
строка в скрипте на bash:
perl -i -p -e 's/STATUS=.*/STATUS=false/' /var/log/text.txt
заменяет STATUS с любым значением на STATUS=false. Но если новое значение этой переменной заранее неизвестно? Конструкция 's/STATUS=.*/STATUS=$NEWSTATUS/' работать не будет.
Пока я думаю попробовать сформировать эту строчку отдельно и передать ее целиком в виде переменной. Например perl -i -p -e $COMMAND
Но может есть более правильное решение?
Как бы вы решили эту задачу?

Примечание:
Попробую описать задачу конкретнее и с примерами.
Как должно быть: Скрипт 1 (variables.sh) при выполнении записывает переменные в файл variables.txt, но только те, с которыми он работает. Скрипт 2 (uploadvariables.sh) их от туда считывает и обрабатывает дальше.

Как это сделал я:

Файл variables.txt (значения переменных не играют роли, TESTVAR - для проверки, что меняются только нужные строки.
**********************************
TESTVAR1=0
DATE=1848331
TESTVAR2=100
VARIABLE1=23980
TESTVAR3=200
VARIABLE2=8050
VARIABLE3=24888
TESTVAR4=300
**********************************

Файл variables.sh:
**********************************
#!/bin/bash
#variables.sh - скрипт, генерирующий разные значения для переменных
ADDRESSFILE=" /home/user/variables.txt"
PART1="perl -i -p -e "

DATE=$(date +%d%m%Y)
VARIABLELIST[0]=DATE
VARIABLE1=$(echo $RANDOM)
VARIABLELIST[1]=VARIABLE1
VARIABLE2=$(echo $RANDOM)
VARIABLELIST[2]=VARIABLE2
VARIABLE3=$(echo $RANDOM)
VARIABLELIST[3]=VARIABLE3

NUMVAR=${#VARIABLELIST[@]}
NUM=0
while [ "$NUM" -ne "$NUMVAR" ]
do
NAMEVAR=$(echo ${VARIABLELIST[$NUM]})
LINEFORPERL=$(echo "'s/"$NAMEVAR"=.*/"$NAMEVAR"="$(($NAMEVAR)))"/'"
TORUN=$PART1$LINEFORPERL$ADDRESSFILE
eval $TORUN
NUM=$(($NUM+1))
done

exit 0
**********************************

Файл uploadvariables.sh:
**********************************
#!/bin/bash
#uploadvariables.sh - загрузка переменных
. /home/user/variables.txt
echo $TESTVAR1
echo $DATE
echo $TESTVAR2
echo $VARIABLE1
echo $TESTVAR3
echo $VARIABLE2
echo $VARIABLE3
echo $TESTVAR4
exit 0
**********************************



Мне кажется, что это решение не оптимально и можно сделать лучше. Итак:
1. Как бы вы решили эту задачу, другими алгоритмами или языками, не меняя конструкцию скрипт->файл->скрипт?
2. Почему если строчку "eval $TORUN" заменить на
perl -i -p -e $LINEFORPERL /home/user/variables.txt
не будут изменяться значения в файле, но и сообщений об ошибке тоже не будет?

Будут интересны любые Коментарии или ссылки на информацию по теме.

СПАСИБО!
Ответы:
Для вас, может-быть это переменная STATUS, а вон там вы что то на перле написали, а здесь вам не нравится что файл переписывать нужно, но для остальных ваш вопрос сплошая каша, вы бы хоть скрипты показали бы.
Немного модифицированный вариант, правда не проверял, работает ли он:) кажись должен


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.