**sed** (ад англ.: **S**tream **ED**itor) — патокавы тэкставы рэдактар (а таксама мова праграмавання), які здзяйсняе розныя прадвызначаныя тэкставыя пераўтварэнні ў паслядоўным патоку тэкставай інфармацыі.

Першапачаткова быў напісаны як UNIX-утыліта Лі Макмэханам (англ.: Lee E. McMahon) з 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* — глабальна, што значыць «*усе ўваходжанні шуканага значэння*». Пасля першага прамога слэша змешчаны рэгулярны выраз для пошуку, пасля другога — выраз для замены. Аднак варта памятаць, што апроч слэша можа ўжывацца і другі сімвал. Напрыклад выразы

```
echo 123123| sed 's/1/5/g'
echo 123123| sed 's%1%5%g'
echo 123123| sed 's$1$5$g'
echo 123123| sed 's|1|5|g'

```

цалкам эквівалентныя.

Каманда замены (s///) безумоўна з'яўляецца самай магутнай і часта ўжыванай камандай sed. Можна ўжываць каманду перанакіравання стандартнага вываду «`> outputFileName`» , тады sed выведзе вынікі на экран.

У Unix каманда sed часта ўжываецца ў выглядзе фільтра ў канвееры (| ці pipe):

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

```

Такім чынам генеруюцца звесткі і перадаюцца на канвеер, каб замяніць *x* на *y*.

Некалькі каманд могуць быць аб'яднаны ў адным файле (напрыклад, subst.sed) і потым ужыты ў выглядзе:

```
 sed -f subst.sed inputFileName > outputFileName

```

Апроч замены, магчымы і іншыя формы простай апрацоўкі. Напрыклад, наступны сцэнарый выдаляе пустыя радкі альбо радкі, якія змяшчаюць толькі прабелы:

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

```

Апошні прыклад ужывае частку рэгулярных выразаў-метасімвалаў:

* ^ Адпавядае пачатку радка
* $ Адпавядае канцу радка
*. Адпавядае любому адзінаму сімвалу
* \* Адпавядае нулю ці больш паўтораў папярэдняга сімвала
* [ ] Адпавядаюць аднаму любому з сімвалаў, уключаных у квадратныя дужкі паміж [ і ]
* [^ ] Адпавядаюць аднаму любому з сімвалаў, не ўключаных у квадратныя дужкі паміж [^ і ]
* \*літара* адпавядаюць аднаму любому сімвалу з пэўнага класа сімвалаў, у прыватнасці \s - гэта любы прабельны сімвал.

Комплексныя канструкцыі sed магчымы да такой ступені, што ён можа быць прадстаўлены як высока спецыялізаваная, хоць і простая, мова праграмавання. Патокам кіравання, напрыклад, можна кіраваць з дапамогай меткі (двукроп'е, за якім ідзе радок, якая павінна быць імем меткі) і інструкцыя галінавання **b**; інструкцыя **b**, за якой ідзе правільнае імя меткі, перасуне апрацоўку ў блок пасля меткі; калі метка не існуе, тады галінаванне завершыць сцэнарый (скрыпт).

sed — гэта адна з найранейшых каманд Unix, якія дазвалялі апрацоўваць файлы з каманднага радка. sed развіўся як натуральны пераемнік папулярнай каманды grep. Роднасны больш позняй мове праграмавання AWK, sed дазволіў ужываць у shell скрыптах моцную і цікавую апрацоўку інфармацыі, і быў адным з першых інструментаў Unix, які сапраўды заахвочваў адэкватна выкарыстоўваць рэгулярныя выразы.

sed і awk часта лічацца прабацькамі і натхняльнікамі мовы Perl, і ў асаблівасці сінтаксісу «`s///`» з прыкладу вышэй.

У мовы sed няма пераменных, ёсць толькі прымітыў GOTO і функцыйныя магчымасці, якія выконваюць галінаванне; тым не менш гэта цьюрынг-поўная мова.

GNU sed мае некалькі новых асаблівасцяў, напрыклад замяшчальная праўка файлаў (замена першапачатковага файла вынікам працы sed). Замяшчальная праўка часта ужываецца замест сцэнарыя ed, напрыклад

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

```

можа ўжывацца замест

```
 ed file
 1,$ s/abc/def/
 w
 q

```

Існуе пашыраная версія sed, якая называецца **Super-sed** (ssed), якая ўключае рэгулярныя выразы, сумяшчальныя з Perl.

Спасылкі
--------

|  |  |
| --- | --- |
| * Аднарадковыя скрыпты sed Архівавана 21 студзеня 2009. (англ.)
* Системное руководство по sed (руск.)
* Документация по sed (руск.)
* Однострочные скрипты sed Архівавана 25 жніўня 2008. (руск.)
* Редактирование /etc/network/interfaces в Debian средствами sed Архівавана 3 верасня 2008. (руск.)
* Просто о sed (руск.)
* Шпаргалка Sed (англ.)
* sed на SourceForge.net (англ.)
* The sed FAQ Архівавана 30 кастрычніка 2018. (англ.)
 | * sed … потоковый редактор (англ.)
* Super-sed Архівавана 21 чэрвеня 2004. (англ.)
* Спецыфікацыя sed у Адзінай спецыфікацыі UNIX на сайце The Open Group (англ.)
* Гульня sokoban на sed (англ.)
* Тэтрыс на sed Архівавана 30 верасня 2008.
* Sed for Windows (англ.)
 |

| ⛭Стандартныя праграмы UNIX (усе праграмы) |
| --- |
| Файлавыя сістэмы | chroot · dd · df · fdisk · fsck · mkisofs · mkswap · mount · umount · rehash |
| Файлы і каталогі | cat · chattr · cd · chmod · chown · chgrp · cksum · cmp · cp · diff · du · file · fuser · ln · ls · lsof · mkdir · mv · od · pwd · rm · rmdir · split · touch |
| Працэсы | at · cron · exit · kill · killall · nice · nohup · pgrep · pidof · pkill · ps · renice · sleep · time · top · wait · watch |
| Карыстальнікі | env · finger · id · last · logname · mesg · passwd · su · sudo · uptime · w · wall · who · whoami · write |
| Сетка | ftp · host · ifconfig · netcat · netstat · nmap · nslookup · ping · rlogin · SSH · traceroute · wget |
| Тэксты | AWK · comm · cut · ed · ex · expand · unexpand · fmt · head · iconv · join · less · more · paste · pr · sed · sort · tac · tail · tr · uniq · wc · xargs |
| Камандны радок | alias · basename · bash · bind · dirname · echo · expr · false · printf · test · true · unset |
| Пошук | find · grep · strings · whereis · which |
| Рознае | banner · bc · cal · date · help · lp · man · Xhistory · size · tee · uname · yes · reboot |

| ⛭Мовы праграмавання |
| --- |
| 
* Ada
* ActionScript
* ALGOL
* APL
* Асэмблер
* BASIC
* C
* C++
* C#
* COBOL
* Delphi
* Erlang
* Forth
* Fortran
* Go
* Haskell
* Java
* JavaScript
* Kotlin
* Lisp
* Logo
* Lua
* Modula-2
* Objective-C
* Pascal
* Perl
* PL/I
* PHP
* Prolog
* Python
* R
* Ruby
* Rust
* Scala
* SQL
* Scheme
* Smalltalk
* Swift
* Zig
* *больш...*

 |
|  Спіс паводле катэгорый |