lamo4ok
@lamo4ok
Программист

Как отредактировать .env файл наиболее нативно?

Есть файл .env, в нем хранятся некие значения в привычном для этого файла формате:

ENV_VAR_1=123
ENV_VAR_2=456
ENV_VAR_3=789

Нужно как можно более нативно для linux, то есть по возможности с помощью неких команд, за это отвечающих, изменить значение одной из переменных. Чтобы мы в итоге получили вот такой вот файл:

ENV_VAR_1=321 # изменено
ENV_VAR_2=456
ENV_VAR_3=789

Нужно учесть, что переменные могут быть обрамлены сверху, снизу или справа комментариями, что их может вообще не быть в файле (тогда стоит дописать переменную в его конец), ну и так далее.
  • Вопрос задан
  • 1317 просмотров
Пригласить эксперта
Ответы на вопрос 5
martin74ua
@martin74ua Куратор тега Linux
Linux administrator
ansible
в конкретном случае - модуль lineinfile
Ответ написан
@Nujabes37
:DEATH
а если значение переменной неизвестно?

cat .env | sed 's/\(ENV_VAR_1=\)\([0-9]*[A-Z]*[a-z]*\)/\1текстДляЗамены/'

И по аналогии, ENV_VAR_2 и т.д. только число - 1 после обратного слеша не удаляйте, он нужен для возврата первого совпадения из регулярки)

А если ее вообще нет в файле?

Ничего страшного не произойдет
А если рядом с ней был комментарий справа?

Предусмотрено в регулярке, можете проверить
Ответ написан
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
sed и базовое владение регулярными выражениями - то, что вам нужно.
Изменить строку, добавить, удалить, прямо в файле.

Вывести filename на экран с внесенными изменениями
sed -r "нужные вам команды" <filename>

Собственно сохранить внесенные изменения в сам файл.
sed -ir "нужные вам команды" <filename>

Чаще всего sed используется с командой "s" (замена), например
sed -ir "s/ENV_VAR_1=.*/ENV_VAR_1=321/" dev.env
Ответ написан
@mozillla
Кто будет искать - набросал скрипт

#!/bin/bash
name=$1
value=$2
envfile=$3

if [ "$envfile" == "" ]; then
    envfile=~/.env
fi


if [ ! -e $envfile ]; then
    touch $envfile
fi

have=$(grep $name $envfile)
if [ "$have" == "" ]; then
    echo "$name=$value" >> $envfile
else
    sed -ir "s/$name=.*/$name=$value/" $envfile
    rm -f ${envfile}r
fi


работает как ./env_set.sh ENV_VAR_1 321 .env
Ответ написан
Комментировать
CityCat4
@CityCat4
Внимание! Изменился адрес почты!
Зачем таким морочиться? mcedit/nano/vim - наше все
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы