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