sed (від англ. Stream EDitor) — потоковий текстовий редактор (а також мова програмування), що застосовує різні зумовлені текстові перетворення до послідовного потоку текстових даних.
Спочатку був написаний як 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 file 1,$ s/abc/def/ w q
Існує розширена версія sed, звана Super-sed (ssed), яка включає регулярні вирази, сумісні з Perl.
Посилання
- [[https://web.archive.org/web/20090115214002/http://opennet.ru/man.shtml?topic=sed&category=1&russian=0 Архівовано 15 січня 2009 у Wayback Machine.] Системное руководство по sed] (рос.)
- Неинтерактивный текстовый редактор sed [ 28 грудня 2008 у Wayback Machine.] (рос.)
- Документация по sed [ 25 травня 2008 у Wayback Machine.] (рос.)
- Однострочные скрипты sed [ 25 серпня 2008 у Wayback Machine.] (рос.)
- Однострочные скрипты sed [ 21 січня 2009 у Wayback Machine.] (англ.)
- Редактирование /etc/network/interfaces в Debian средствами sed [ 3 вересня 2008 у Wayback Machine.] (рос.)
- Просто о sed [ 31 жовтня 2008 у Wayback Machine.] (рос.)
- Шпаргалка Sed [ 7 січня 2009 у Wayback Machine.] (англ.)
- (англ.)
- The sed FAQ (англ.)
- sed [ 21 листопада 2018 у Wayback Machine.] (англ.)
- Super-sed [ 21 червня 2004 у Wayback Machine.] (англ.)
- Специфікація sed в Єдиній специфікації UNIX на сайті The Open Group [ 14 січня 2009 у Wayback Machine.](англ.)
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
sed vid angl Stream EDitor potokovij tekstovij redaktor a takozh mova programuvannya sho zastosovuye rizni zumovleni tekstovi peretvorennya do poslidovnogo potoku tekstovih danih Spochatku buv napisanij yak UNIX utilita en z Bell Labs v 1973 74 rokah Zaraz sed dostupnij faktichno dlya bud yakoyi operacijnoyi sistemi sho pidtrimuye robotu z komandnim ryadkom Opissed otrimuye vhidnij potik zazvichaj fajl i redaguye kozhen ryadok zgidno z pravilami viznachenimi v sed skripti z vikoristannyam prostoyi movi sed i potim vivodit rezultat u vihidnij potik sed chasto nazivayut neinteraktivnim tekstovim redaktorom Vin vidriznyayetsya vid zvichajnih tekstovih redaktoriv invertovanistyu po vidnoshennyu do tekstu i naboru komand redaguvannya Zvichajni tekstovi redaktori spochatku zavantazhuyut ves tekst dokumenta a potim zastosovuyut do nogo komandi po odnij todi yak sed spochatku zavantazhuye v sebe nabir komand a potim zastosovuye ves nabir komand do kozhnogo ryadka tekstu Oskilki odnochasno v pam yati znahoditsya tilki odin ryadok sed mozhe obrobiti dosit veliki tekstovi fajli Nabir komand sed zroblenij za zrazkom redaktora ed prote neobhidno pam yatati pro jogo invertovanist Napriklad komanda 25d redaktora ed oznachaye jdit do ryadka 25 i vidalit jogo todi yak ta zh komanda sed oznachaye yaksho ce ryadok z nomerom 25 to vidalit ne vivodte jogo Vidomij vinyatok komandi kopiyuvannya i peremishennya sho ohoplyuyut diapazon ryadkiv i takim chinom ne mayut pryamih ekvivalentiv v sed Natomist sed vvodit dodatkovij bufer nazvanij prostorom zahoplennya i dodatkovi komandi dlya upravlinnya nim Napriklad komanda Skopiyuvati ryadok 25 v ryadok 76 25t76 v ed bula b zakodovana yak dvi okremi komandi 25h 76g v sed dlya togo shob zberegti ryadok v prostori zahoplennya doti poki dani ne budut vityagnuti Priklad sho demonstruye tipove vikoristannya sed sed e s oldstuff newstuff g inputFileName gt outputFileName Tut s zamina g globalno sho oznachaye u vsomu ryadku Pislya pershogo pryamogo slesha roztashovanij regulyarnij viraz dlya poshuku pislya drugogo viraz dlya zamini Komanda zamini s bezumovno ye najmogutnishoyu i chasto vikoristovuvanoyu komandoyu sed Perenapravlennya standartnogo vivodu gt outputFileName mozhna opustiti todi sed vivede rezultat na ekran U Unix komanda sed chasto vikoristovuyetsya u viglyadi filtru v konvejyeri abo pipe generate data sed e s x y Takim chinom generuyutsya dani i peredayutsya na konvejyer shob zaminiti x Dekilka komand mozhut buti ob yednani v odnomu fajli napriklad subst sed i potim zastosovani u viglyadi sed f subst sed inputFileName gt outputFileName Krim zamini mozhlivi i inshi formi prostoyi obrobki Napriklad nastupnij scenarij vidalyaye porozhni ryadki abo ryadki yaki mistyat tilki propuski sed e s d inputFileName Cej priklad vikoristovuye deyaki z regulyarnih viraziv metasimvoliv Vidpovidaye pochatku ryadka Vidpovidaye kincyu ryadka Vidpovidaye bud yakomu yedinomu simvolu s Vidpovidaye bud yakomu probilnomu simvolu probil tabulyaciya tosho Vkazuye sho poperednij simvol povtoryuyetsya 0 tobto vidsutnij u comu misci 1 abo bilshe raziv Vidpovidayut odnomu bud yakomu z simvoliv vklyuchenih u kvadratni duzhki Skladni konstrukciyi sed mozhlivi do takogo stupenya sho vin mozhe buti predstavlenij yak visoko specializovana hoch i prosta mova programuvannya Potokom upravlinnya zokrema mozhna upravlyati za dopomogoyu mitki dvokrapka za yakoyu sliduye ryadok yakij maye buti im yam mitki i instrukciyi rozgaluzhennya b instrukciya b za yakoyu sliduye pravilne im ya mitki peremistit obrobku v blok pislya mitki yaksho mitki ne isnuye todi rozgaluzhennya zavershit scenarij skript sed ce odna z najbilsh rannih komand Unix yaki dozvolyali obroblyati fajli danih z komandnogo ryadka sed rozvinuvsya yak prirodnij nastupnik populyarnoyi komandi grep Sporidnenij piznishij movi programuvannya AWK sed dozvoliv zastosovuvati v skriptah OBOLONKI mogutnyu i cikavu obrobku danih i buv odnim z pershih instrumentiv Unix sho dijsno zaohochuvav adekvatno vikoristovuvati regulyarni virazi sed i awk chasto vvazhayutsya praroditelyami i nathnennikami movi Perl i osoblivo sintaksisu s z prikladu vishe U movi sed nemaye zminnih ne rahuyuchi oblasti zberigannya holding space a takozh numerovanih grup u shabloni pidstanovki ye tilki primitiv GOTO i funkcionalni mozhlivosti sho vikonuyut rozgaluzhennya prote ce povna v smisli Tyuringa mova GNU sed maye dekilka novih osoblivostej napriklad zamishayuchu pravku fajliv zamina pervinnogo fajlu rezultatom roboti sed Zamishayucha pravka chasto vikoristovuyetsya zamist scenariyu ed napriklad sed i s abc def file mozhe vikoristovuvatisya zamist ed file 1 s abc def w q Isnuye rozshirena versiya sed zvana Super sed ssed yaka vklyuchaye regulyarni virazi sumisni z Perl Posilannya https web archive org web 20090115214002 http opennet ru man shtml topic sed amp category 1 amp russian 0 Arhivovano15 sichnya 2009 u Wayback Machine Sistemnoe rukovodstvo po sed ros Neinteraktivnyj tekstovyj redaktor sed 28 grudnya 2008 u Wayback Machine ros Dokumentaciya po sed 25 travnya 2008 u Wayback Machine ros Odnostrochnye skripty sed 25 serpnya 2008 u Wayback Machine ros Odnostrochnye skripty sed 21 sichnya 2009 u Wayback Machine angl Redaktirovanie etc network interfaces v Debian sredstvami sed 3 veresnya 2008 u Wayback Machine ros Prosto o sed 31 zhovtnya 2008 u Wayback Machine ros Shpargalka Sed 7 sichnya 2009 u Wayback Machine angl angl The sed FAQ angl sed 21 listopada 2018 u Wayback Machine angl Super sed 21 chervnya 2004 u Wayback Machine angl Specifikaciya sed v Yedinij specifikaciyi UNIX na sajti The Open Group 14 sichnya 2009 u Wayback Machine angl