Sed, програми і утиліти

Спочатку був написаний як UNIX-утиліта Лі МакМехона (англ. Lee E. McMahon) з Bell Labs в 1973-74 роках. Зараз sed доступний фактично для будь-якої операційної системи, що підтримує роботу з командним рядком.

sed отримує вхідний потік (зазвичай файл) через підрядник, редагує кожен рядок згідно з правилами, певним в sed-скрипті з використанням простої мови sed. і потім виводить результат у вихідний потік.

Наступний приклад демонструє типове використання sed:

Тут s - заміна; g - глобально, що означає «все входження шуканого значення». Після першого прямого слеша розташоване регулярний вираз для пошуку, після другого - вираз для заміни. Однак слід пам'ятати, що крім слеша може використовуватися і інший символ. Так наприклад вирази

Команда заміни (s ///) безумовно є найпотужнішою і часто використовуваної командою sed. Перенаправлення стандартного виводу «> outputFileName» можна опустити, тоді sed виведе результат на екран.

В Unix команда sed часто використовується у вигляді фільтру в конвейєрі (| або pipe):

Таким чином генеруються дані і передаються на конвеєр, щоб замінити x на y.

Кілька команд можуть бути об'єднані в одному файлі (наприклад, subst.sed) і потім застосовані у вигляді:

Крім заміни, можливі й інші форми простої обробки. Наприклад, наступний сценарій видаляє порожні рядки або рядки, які містять тільки пропуски:

Останній приклад використав частину регулярних виразів-метасимволов:

  • ^ Відповідає початку рядка
  • $ Відповідає кінця рядка
  • . Відповідає будь-якому єдиному символу
  • * Відповідає нулю або більше повторення попереднього символу
  • [] Відповідають одному будь-якому з символів включених в квадратні дужки, []

Комплексні конструкції sed можливі до такої міри, що він може бути представлений як високо спеціалізований, хоча і простий, мова програмування. Потоком управління, наприклад, можна управляти за допомогою мітки (двокрапка, за яким слідує рядок, яка повинна бути ім'ям мітки) та інструкції розгалуження b; інструкція b. за якої слід правильно, має перемістить обробку в блок після мітки; якщо мітка не існує, тоді розгалуження завершить сценарій (скрипт).

sed - це одна з найбільш ранніх команд Unix, які дозволяли обробляти файли даних з командного рядка. sed розвинувся як природний наступник популярної команди grep. Споріднений більш пізнього мови програмування AWK, sed дозволив застосовувати в shell скриптах потужну і цікаву обробку даних, і був одним з перших інструментів Unix, дійсно заохочував адекватно використовувати регулярні вирази.

За швидкістю виконання sed помітно швидше ніж AWK. [Джерело не вказано 507 днів]

sed і awk часто вважаються прабатьками і натхненниками мови Perl, і особливо синтаксису «s ///» з прикладу вище.

У мови sed немає змінних, є тільки примітив GOTO і виконують розгалуження функціональні можливості; проте це Тьюринг-повний мову.

GNU sed має декілька нових особливостей, наприклад заміщає правка файлів (заміна первісного файлу результатом роботи sed). Заміщає правка часто використовується замість сценарію ed. наприклад

може використовуватися замість

Існує розширена версія sed. звана Super-sed (ssed), яка включає регулярні вирази, сумісні з Perl.

Схожі статті