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

Похожие записи

Как заблокировать обновление пакета в Ubuntu?

Иногда необходимо запретить обновление какого-нибудь пакет из нестабильного репозитория. Для этого есть 2 решения: грубое - отключить репозитарий, элегантное - заморозить обновление отдельного пакета.

Команда, чтобы заблокировать обновление пакета:

sudo apt-mark hold имя_пакета

Команда, чтобы разблокировать обновление пакета:

sudo apt-mark unhold имя_пакета
18 октября 2017 г. в Linux

phpDocumentor на Ubuntu

Запись об установке и использовании phpDocumentor — системе документирования исходных текстов на PHP.