Linux. Команда sed
Команда sed - это потоковый редактор текста. Вставляет/изменяет/добавляет текст не открывая файл визуально. Обычно используется в скриптах.
Online песочница sed
Пара важных параметров:
- -r расширенная поддержка синтаксиса регулярных выражений
- -i редактирование "на месте"
Общие примеры
Замените первое вхождение регулярного выражения в каждой строке файла:
sed 's/{{regex}}/{{replace}}/' {{filename}}
Замените все вхождения расширенного регулярного выражения в файле:
sed -r 's/{{regex}}/{{replace}}/g' {{filename}}
Замените все вхождения строки в файле, перезаписав файл (т.е. на месте):
sed -i 's/{{find}}/{{replace}}/g' {{filename}}
Заменить только строки, соответствующие шаблону line_pattern:
sed '/{{line_pattern}}/s/{{find}}/{{replace}}/' {{filename}}
Про разделители и подстановку
sed умеет понимать любой разделитель, например ~
или _
. Рассмотрим пример замены слешей.
echo 'C:\foo\bar.json' | sed 's/\\/\//g'
# C:/foo/bar.json
's/\\/\//g'
<- не очень, правда? А если так 's;\\;\/;g'
echo 'C:\foo\bar.json' | sed 's_\\_\/_g'
# C:/foo/bar.json
Примеры из проекта
Добавить строчку "my-services",
на 123 строку файла info.json
sed -i '123a "my-services",' /usr/share/nginx/html/brand/info.json
Заменить __I18N_HASH__
на значение переменной окружения CI_COMMIT_REF_NAME в файле environment.prod.ts
sed -i "s|__I18N_HASH__|${CI_COMMIT_SHA}|" src/environments/environment.prod.ts