В Linux мне нужно программно заменить строки-заполнители, такие как <SECRET>
, в файле .env
следующим образом:
KEY=<SECRET>
ANOTHER_VARIABLE=another-value
# here's a comment
PASSWORD=<SECRET>
Предупреждение: каждое вхождение этого заполнителя должно быть заменен на другое создание экземпляра кодированной в Base64 случайности - например, из OpenSSL, поскольку он легко доступен во многих Linux.
чтение этот ответ , я пробовал это с GNU sed
4.8:
sed -i '0,/<SECRET>/ s__'$(openssl rand -base64 42)'_' .env
(В части замещения был выбран альтернативный разделитель _
, поскольку закодированные в Base64 байты могут содержать символы /
или +
и в противном случае будут иметь значение sh при непреднамеренно используется в качестве разделителей.)
Это работает для одиночных замен, по одному вызову за раз.
Но код возврата sed всегда 0
, даже когда все вхождения регулярного выражения были использованы и заменены ...
Вопрос: есть ли способ заставить sed возвращать ненулевой код, когда заполнители были исчерпаны?
(Если это не может быть сделано с помощью sed, я рад любому решению с awk или подобным.)