Linux Labs

Bash: обработка текста и скрипты / Ступень 2 из 9

sed и awk: правка и поля потока

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 3 из 9 · на машине · 6 мин

Правка на месте

Замена готова — осталось записать её в тридцать файлов так, чтобы было куда откатиться.

Ключ -i записывает результат обратно в файл, а на экран ничего не печатает. С суффиксом, -i.bak, sed сначала сохраняет исходник рядом — site-01.conf.bak, — и при ошибке его можно вернуть. Файлов sed принимает сколько угодно: site-*.conf — шаблон имён, оболочка раскроет его в тридцать имён.

Проверь себя 1 вопрос

Ты выполнил sed -i.bak '/^timeout=/s/30/60/' site-*.conf, а потом по ошибке ещё раз ту же команду. Что теперь в строке timeout= файла site-01.conf.bak?

  • Второй запуск сохранил в .bak уже исправленный файл и затёр прежнюю копию: cat site-01.conf.bak покажет timeout=60.

  • Второй запуск не нашёл в строке 30 — там уже 60 — и ничего не заменил. В файле и в копии timeout=60.

  • Копия на месте, но её перезаписал второй запуск: теперь в ней timeout=60.

Каждый запуск -i.bak кладёт в копию то, что лежит в файле сейчас. Второй запуск сохранил уже исправленный файл, и исходник с timeout=30 пропал. Поэтому правку на месте запускают один раз, а перед повтором смотрят в копию.

Правку на месте проверяют вне sed. grep -h '^timeout=' site-*.conf | sort | uniq -c сводит нужную строку всех файлов в одну таблицу: -h убирает имя файла из начала строк, и одинаковые строки склеиваются в одну с числом. diff показывает, чем файл отличается от копии: diff site-01.conf.bak site-01.conf печатает старую строку со знаком < и новую со знаком >.

Упражнение · сделать

Переведи бэкенд во всех конфигах

В ~/sed-lab/conf переведи бэкенд всех site-*.conf на 10.0.0.9:8080. Строки отката должны остаться прежними, а у каждого файла — копия .bak с исходником.

Войти и начать Машина доступна после входа

Цели · 0 из 2

  • Перевести строки backend= на новый адрес, не тронув строки отката ещё не выполнена
  • Сохранить исходник каждого файла в .bak ещё не выполнена

Цели шага

0 из 2
  • Перевести строки backend= на новый адрес, не тронув строки отката — ещё не выполнена
  • Сохранить исходник каждого файла в .bak — ещё не выполнена
Ubuntu 24.04

Цели шага

0 из 2
  • Перевести строки backend= на новый адрес, не тронув строки отката — ещё не выполнена
  • Сохранить исходник каждого файла в .bak — ещё не выполнена
Загрузка…