1

Так что мой вопрос в значительной степени основан на связанном вопросе, но имеет одно ключевое отличие.

В ответе дано:

sed '/^FOOBAR=/{h;s/=.*/=newvalue/};${x;/^$/{s//FOOBAR=newvalue/;H};x}' infile

Я сделал вариант, который работает для того, чтобы сделать FOOBAR переменной (например, имя программы, а затем поместить ее в цикл for, чтобы составить список программ и их статус установки). Это довольно сложный проект, над которым я работаю, чтобы упростить установку Drawile для Raspberry Pi с некоторыми новыми функциями, но это другая червя, в которую я не буду вдаваться .

sed -i '/^'"$FOOBAR"'=/{h;s/=.*/=newvalue/};${x;/^$/{s//'"FOOBAR"'=newvalue/;H};x}' infile

Я хотел бы, чтобы newvalue был переменной $, которая может измениться в скрипте. Я просто не могу понять, как заставить это работать, просто используя «и» делает это неправильно. Я часами просматривал и пытался читать учебные пособия, но я просто недостаточно разбираюсь и глубоко погрузился во внутреннюю работу sed. В большинстве случаев эта переменная будет выглядеть так: да, нет или ошибка. Тем не менее, я мог бы также использовать его для представления путей к папкам и файлам ... поэтому я также беспокоюсь о / подстановках здесь. Даже если это не полный ответ, я с радостью разбираюсь в этом сам, пока я могу указать направление, в котором мне нужно понять это лучше.


Изменить: не так много, чтобы опубликовать, учитывая, что есть что-то фундаментальное, я уверен, что мне не хватает, я только что попробовал варианты размещения кавычек вокруг нового значения. Такие, как следует ...

sed -i '/^FOOBAR=/{h;s/=.*/=$newvalue/};${x;/^$/{s//FOOBAR=$newvalue/;H};x}' infile

Вывод: FOOBAR = $ newvalue Это неверно. Должен вывести сохраненное значение для нового значения!

sed -i '/^FOOBAR=/{h;s/=.*/="$newvalue"/};${x;/^$/{s//FOOBAR="$newvalue"/;H};x}' infile

Вывод: FOOBAR = "$ newvalue" Это неверно. Должен вывести сохраненное значение для нового значения!

sed -i '/^FOOBAR=/{h;s/=.*/='"$newvalue"'/};${x;/^$/{s//FOOBAR='"$newvalue"'/;H};x}' infile

Вывод: sed: -e выражение # 1, char 30: неизвестная опция для `s '

Если newvalue равно Yes, то я бы хотел, чтобы вывод был «FOOBAR = Yes» или, возможно, путь к папке.


Редактировать 2: Это может быть что угодно, действительно, при условии, что это просто работает. Я не особо разбираюсь в этом, но у меня, наверное, больше всего опыта с использованием sed, так что это то, на что я продолжаю смотреть ...


Изменить 3: нашел ответ.

sed -i '\!^'"$FOOBAR"'=!{h;s!=.*!='"$newvalue"'!};${x;\!^$!{s!!'"$FOOBAR"'='"$newvalue"'!;H};x}' /home/pi/Public/test.txt

0