Вивчаємо команди linux sed

Вивчаємо команди Linux: sed

1. Введення

Ласкаво просимо до другої частини нашої серії, яка присвячена sed, версії GNU. Існує кілька версій sed, які доступні на різних платформах, але ми сфокусуємось на GNU sed версії 4.x. Багато хто з вас чули про sed, або вже використовували його, швидше за все як інструмент заміни. Але це тільки одне з призначень sed, і ми постараємося показати вам всі аспекти використання цієї утиліти. Його назва розшифровується як "Stream EDitor" і слово "stream" (потік) в даному випадку може означати файл, канал, або просто stdin. Ми сподіваємося, що у вас вже є базові знання про Linux, а якщо ви вже працювали з регулярними виразами, або принаймні знаєте, що це таке, то все для вас буде набагато простіше. Обсяг статті не дозволяє включити в неї повне керівництво за регулярними виразами, замість цього ми озвучимо базові концепції і дамо велику кількість прикладів використання sed.

2. Встановлення

Тут не потрібно багато розповідати. Швидше за все sed у вас вже встановлений, так як він використовується різними системними скриптами, а також користувачами Linux, які хочуть підвищити ефективність своєї роботи. Ви можете дізнатися, яка версія sed у вас встановлена, за допомогою команди:

У моїй системі ця команда показує, що у мене встановлений GNU sed 4.2.1 плюс дає посилання на домашню сторінку програми та інші корисні відомості. Пакет називається "sed" незалежно від дистрибутива, крім Gentoo, де він присутній неявно.

3. Концепції

4. Регулярні вирази

Так як команди (скрипти) sed для багатьох залишаються загадкою, ми відчуваємо, що наші читачі повинні розуміти базові концепції, а не сліпо копіювати і вставляти команди, значення яких вони не розуміють. Коли людина хоче зрозуміти, що представляють собою регулярні вирази, ключовим словом є "відповідність", або, точніше, "шаблон відповідності". Наприклад, в звіті для свого департаменту ви написали ім'я Nick, звертаючись до мережевого архітекторові. Але Nick пішов, а на його місце прийшов John, тому тепер ви повинні замінити слово Nick на John. Якщо файл зі звітом називається report.txt, ви повинні виконати наступну команду:

За замовчуванням sed використовує stdout, ви можете використовувати оператор перенаправлення виведення, як показано в прикладі вище. Це дуже простий приклад, але ми проілюстрували кілька моментів: ми шукаємо все відповідності шаблоном "Nick" і замінюємо у всіх випадках на "John". Відзначимо, що sed призводе пошук з урахуванням регістру, тому будьте уважні і перевірте вихідний файл, щоб переконатися, що всі заміни були виконані. Наведений вище приклад можна було записати і так:

Добре, скажете ви, але де ж тут регулярні вирази? Так, ми хотіли спочатку показати приклад, а тепер починається найцікавіша частина.
Якщо ви не впевнені, чи написали ви "nick" або "Nick", і хочете передбачити обидва випадки, необхідно використовувати команду sed 's / Nick / nick / John / g'. Вертикальна риса має значення, яке ви повинні знати, якщо вивчали C, тобто ваше вираз буде відповідати "nick" або "Nick". Як ви побачите нижче, канал може використовуватися і іншими способами, але зміст залишається той же самий. Інші оператори, широко використовуються в регулярних виразах - це "?", Який відповідає повторення попереднього символу нуль або один раз (тобто flavou? R буде відповідати flavor і flavour), "*" - нуль або більше разів, "+" - один або більше разів. "^" Відповідає початку рядка, а "$" - навпаки. Якщо ви - користувач vi або vim, багато речей здадуться вам знайомими. Зрештою, ці утиліти, разом з awk і С сягають корінням в ранні дні UNIX. Ми не будемо більше говорити на цю тему, так як простіше зрозуміти значення цих символів на прикладах, але ви повинні знати, що існують різні реалізації регулярних виразів: POSIX, POSIX Extended, Perl, а також різні реалізації нечітких регулярних виразів, що гарантують вам головний біль .

5. Приклади використання sed

Схожі статті