NOC online · 24/7Longview, TX · +1 323 412 0665
KinetikatechServers · Security · Websites
RU

Команды Linux и навыки работы с оболочкой

sed: редактирование потоков без открытия редактора

sed редактирует вбок: через него проходят целые потоки текста, выходят преобразованными, и ни один редактор не открывается. Его репутация основана на ключе -i, который превращает однострочную замену в пакетную операцию над тысячами файлов, а также на историях о катастрофах администраторов, которые запускали его без суффикса резервной копии. Безопасный рабочий процесс никогда не меняется: запустите видимую замену, подтвердите вывод, затем добавьте -i с суффиксом и сохраните код выхода.

Главное

  • Предварительный просмотр перед фиксацией: файл sed -n '10,20p' показывает диапазон строк, и та же комбинация -n плюс p печатает только строки, соответствующие регулярному выражению или адресу.
  • Замените флагами, которые делают то, что вы имеете в виду: s/old/new/g для всех совпадений, число типа 2g только для второго и -E для расширенного регулярного выражения без страницы с обратной косой чертой.
  • Изменения на месте получают суффикс, без исключений: приложение sed -i.bak 's/http:/https:/g' сохраняет резервную копию с тем же именем рядом с каждым изменением; этот суффикс спас больше развертываний, чем история отмены любого редактора.
  • Разделители бесплатны: s|/var/www|/srv/app|g (или s#...#g) позволяет избежать драк с косой чертой, когда ваш шаблон полон путей.
  • -i не является атомарным: сбой или неправильное регулярное выражение в середине пакета однажды оставили наполовину переписанные файлы, поэтому массовые задания выполняются с копиями или отслеживаемыми git деревьями, а не с единственной копией.
  • GNU и BSD sed расходятся во мнениях по поводу -i: BSD требует суффикс перед сценарием (sed -i '' работает в macOS, это не синтаксис Linux), что является еще одной причиной, по которой сценарии переносимости полностью избегают -i.
  • Удалить и изолировать — честные глаголы: 'd' удаляет совпадающие строки (sed '/^#/d' удаляет комментарии), а -n с диапазоном изолирует раздел; оба читаются лучше, чем умные замены.
  • Все, что находится за пределами однострочных изменений, буквальных многострочных блоков или соединений с сохранением состояния, принадлежит awk или реальному скрипту; принуждение sed к работе программиста приводит к рождению нечитаемых однострочников.

Заметка из практики

Мой первый sed -i без суффикса .bak попал в рабочую конфигурацию nginx прямо перед дневным пиком трафика. С тех пор каждое редактирование на месте сопровождается суффиксом резервной копии, и я читаю выходные данные пробного прогона еще до того, как -i даже приближается к команде.

Частые вопросы

Как редактировать только строки, которые соответствуют чему-то еще?

Обратитесь к ним: sed '/cache/s/true/false/' меняет значение true на false только в строках кэша и ограничивает изменения области действия, например '/<VirtualHost>/,/<\/VirtualHost>/s/Old/New/g', до блоков; адрес идет первым, команда – вторым.

Почему sed не соответствует концам строк в файле, редактируемом Windows?

Эти строки заканчиваются символами возврата каретки, которых не ожидают привязки '$'; сначала удалите их с помощью tr или нормализуйте по пути, и многострочный контент по-прежнему будет принадлежать awk или Perl с -0777.

Sed быстрее, чем awk, для простых замен?

Незначительно и несущественно; оба завершаются за миллисекунды для файлов размера конфигурации. Выбирайте по читабельности, ведь коллеге за полгода предстоит разобрать вашу остроту.

Могу ли я вставлять целые блоки конфигурации с помощью sed?

Да: «a» добавляется после, «i» вставляется перед, а «c» заменяет строку, но сохраняйте вставленный текст простым и одноцелевым; реальные блоки принадлежат файлу шаблона или правильному этапу подготовки.

Как мы берём на себя команды linux и навыки работы с оболочкой

Договорились: Команды и сценарии сценариев, которые решают, управляет ли администратор сервером или борется с ним: поиск, преобразование, передача и контроль текста и процессов с помощью инструментов, которые есть в каждой базовой установке. Передайте это нашей услуге Безопасность серверов Linux и Администрирование серверов — вопрос будет закрыт, оценён по делу, внедрён без лишних движений и под наблюдением круглосуточно.

Поговорить с инженером

Проблема с сервером? Взломанный сайт? Медленная страница?

Критические инциденты с ответом в течение 30 минут — круглосуточно, 7 дней в неделю.

Запросить экстренную поддержку support@kinetikatech.com