Movatterモバイル変換


[0]ホーム

URL:


Перейти до вмісту
Вікіпедія
Пошук

sed

Матеріал з Вікіпедії — вільної енциклопедії.
Sed
Типкомп'ютерна програма
стандартна утиліта UNIX[d]
потоковий текстовий редакторd і скриптова мова Редагувати інформацію у Вікіданих
РозробникЛі Едвард Макмегонd[1] Редагувати інформацію у Вікіданих
Операційна системаUNIX-подібні операційні системи Редагувати інформацію у Вікіданих

sed (відангл.StreamEDitor) — потоковийтекстовий редактор (а такожмова програмування), що застосовує різні зумовлені текстові перетворення до послідовного потоку текстових даних.

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

Опис

[ред. |ред. код]

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

sed часто називають неінтерактивним текстовим редактором. Він відрізняється від звичайних текстових редакторів «інвертованістю» по відношенню до тексту і набору команд редагування. Звичайні текстові редактори спочатку завантажують весь текст документа, а потім застосовують до нього команди по одній, тоді як sed спочатку завантажує в себе набір команд, а потім застосовує весь набір команд до кожного рядка тексту. Оскільки одночасно в пам'яті знаходиться тільки один рядок, sed може обробити досить великі текстові файли.

Набір команд sed зроблений за зразком редактораed, проте необхідно пам'ятати про його інвертованість. Наприклад, команда25d редактораed означає «йдіть до рядка 25 і видаліть його», тоді як та ж командаsed означає «якщо це рядок з номером 25, то видаліть (не виводьте) його». Відомий виняток — команди копіювання і переміщення, що охоплюють діапазон рядків і таким чином не мають прямих еквівалентів вsed. Натомість, sed вводить додатковий буфер, названий «простором захоплення», і додаткові команди для управління ним. Наприклад команда «Скопіювати рядок 25 в рядок 76» (25t76) вed була б закодована як дві окремі команди (25h; 76g) вsed для того, щоб зберегти рядок в просторі захоплення доти, поки дані не будуть витягнуті.

Приклад, що демонструє типове використання sed:

sed -e 's/oldstuff/newstuff/g' inputFileName > outputFileName

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

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

generate_data | sed -e 's/x/y/'

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

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

sed -f subst.sed inputFileName > outputFileName

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

sed -e '/^\s*$/d' inputFileName

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

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

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

sed — це одна з найбільш ранніх команд Unix, які дозволяли обробляти файли даних з командного рядка.sed розвинувся як природний наступник популярної командиgrep. Споріднений пізнішій мові програмуванняAWK, sed дозволив застосовувати в скриптах ОБОЛОНКИ могутню і цікаву обробку даних, і був одним з перших інструментів Unix, що дійсно заохочував адекватно використовуватирегулярні вирази.

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

У мови sed немає змінних (не рахуючи області зберігання (holding space), а також нумерованих груп у шаблоні підстановки), є тільки примітив GOTO і функціональні можливості, що виконують розгалуження; проте це повна в смисліТюринга мова.

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

sed -i 's/abc/def/' file

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

ed file1,$ s/abc/def/wq

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

Посилання

[ред. |ред. код]
UNIX-команди, що запускаються в режимі командного рядка
Файлові системи:
Файли ікаталоги:
Процеси:
Користувачі:
Мережа:
Тексти:
Командний рядок:
Друк:
Пошук:
Різне:
DOS
Windows
UNIX-подібні ОС

1Nvi1OzeditorEdElvisGeanygeditGnotepadKateKeditKWriteLeafpadNanoNeditNviNeditOzeditorViXcoralXemacsMousepad

Крос-
платформові

AcmeActiveState KomodoAtomEmacsElvisFCKeditorFteJJEditJOENviSciTESedUltraEditSublime TextVimZed

SDK
Функції
  1. http://sed.sourceforge.net/grabbag/tutorials/sed_mcmahon.txt
Отримано зhttps://uk.wikipedia.org/w/index.php?title=Sed&oldid=46280836
Категорії:
Приховані категорії:

[8]ページ先頭

©2009-2026 Movatter.jp