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

Команди Linux і навички оболонки

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

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

Головне

  1. Попередній перегляд перед фіксацією: файл sed -n '10,20p' показує діапазон рядків, а та сама комбінація -n плюс p друкує лише ті рядки, які відповідають регулярному виразу чи адресі.
  2. Замініть прапорцями, які виконують те, що ви маєте на увазі: s/old/new/g для всіх збігів, число на кшталт 2g лише для другого та -E для розширеного регулярного виразу без сторінок екранування зворотної косої риски.
  3. Редагування на місці отримують суфікс, без винятків: програма sed -i.bak 's/http:/https:/g' зберігає резервну копію з тим самим іменем біля кожної зміни; цей суфікс врятував більше розгортань, ніж історія скасувань будь-якого редактора.
  4. Розділювачі вільні: s|/var/www|/srv/app|g (або s#...#g) уникає конфліктів, коли ваш шаблон повний шляхів.
  5. -i не є атомарним: збій або неправильний регулярний вираз у середині пакету одного разу залишив наполовину переписані файли, тому групові завдання виконуються з копіями чи деревами, що відстежуються git, ніколи з єдиною копією.
  6. GNU і BSD sed розходяться щодо -i: BSD вимагає суфікс перед сценарієм (sed -i '' працює в macOS, не є синтаксисом Linux), що є ще однією причиною, чому сценарії переносимості повністю уникають -i.
  7. Видалити та ізолювати є чесними дієсловами: 'd' видаляє відповідні рядки (sed '/^#/d' видаляє коментарі), а -n із діапазоном ізолює розділ; обидва читаються краще, ніж розумні заміни.
  8. Усе, що минуло від однорядкових редагувань, літеральних багаторядкових блоків або об’єднань із збереженням стану, належить до 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' замінює рядок, але вставлений текст повинен бути простим і одноцільовим; справжні блоки належать до файлу шаблону або належного етапу підготовки.

Допомога Kinetikatech: команди linux і навички оболонки

Ми бралися за це сотні разів: Команди та сценарії, які вирішують, чи керує адміністратор сервером, чи бореться з ним: шукайте, трансформуйте, пересилайте та контролюйте текст і процеси за допомогою інструментів, які присутні в кожній базовій установці. Служба Безпека серверів Linux та Адміністрування серверів дає замкнений цикл: ми оцінюємо, впроваджуємо, цілодобово стежимо й підхоплюємо за 30 хвилин, коли це критично.

Поговорити з інженером

Проблема із сервером? Зламаний сайт? Повільна сторінка?

Критичні інциденти — відповідь за 30 хвилин, цілодобово, 7 днів на тиждень.

Запросити екстрену підтримку support@kinetikatech.com