Sed znamená ''stream editor''. To znamená, že vykonává svou práci proudově: vstup (nebo soubor) bere řádek po řádce a koná nad nimi zadané příkazy.
Příkaz může (ale nemusí) být uvozen parametrem -e. Je nanejvýš vhodné příkaz celý vložit do apostrofů - budeme tu totiž používat regulární výrazy, a nechceme aby se interpretovaly [[vyuka:metaznaky_shellu|metaznaky shellu]].
===Příkazy===
Nejjednodušší příkaz je ''p''. Vytiskne řádku.
#takto použitý příkaz vytiskne každou řádku dvakrát.
sed -e 'p'
#parametr -n zabrání implicitnímu vypisování řádek - takže vypíše každou řádku pouze jednou.
sed -n -e 'p'
Již jsme používali příkaz ''s'', neboli ''substitute'' - zaměň.
#Zamění ahoj za nazdar. Pokud jsou ale na řádce dvě ahoj, zamění pouze první...
sed -e 's/ahoj/nazdar/'
#...pro zaměnění všech musíme ještě použít parametr g - global:
sed -e 's/ahoj/nazdar/g'
Vidíme, že příkaz s má v sobě ''vždy'' tři zpětná lomítka. Oddělují:
* ''s'' jako označení příkazu
* regulární výraz, odpovídající části textu, již chceme zaměnit
* to, čím ji chceme nahradit ... to už není regulární výraz - ale můžeme zde použít \1 \2 ... ''zpětné reference'', zvláštní význam má i & (vloží celý nahrazovaný řetězec)
* parametry příkazu - například ''g'',''i'' - nehleď na velikost písmen, ''p'' - vytiskne řádku, na které proběhla záměna, ''w soubor'' - zapíše do souboru.
Příklady:
# uzávorkování každého velkého písmenka:
sed -e 's/[A-Z]/(&)/g'
# to samé jako grep pattern
sed -n 's/pattern/&/p'
===Další příkazy===
* ''q'' ... ukončit
* ''d'' ... smaže řádek
* ''a'' ... přidat řádek (za aktuální)
* ''i'' ... vložit řádek (před aktuální)
* ''c'' ... změnit řádek (za text následující po mezeře)
Příkazy se oddělují středníkem, nebo koncem řádky.
----
===Omezovací příkazy - ''restriction commands''===
Píše se před příkaz, oddělen od něj mezerou.
Může omezovat dle pořadí řádků, nebo regulárním výrazem uzavřeným mezi lomítky (''/regexp/'' )
Chceme-li negovat, použijeme '''!''' před příkazem
#smaže třetí řádku
sed -e '3 d'
# Smaže první číslo na všech řádkách začínajících A
sed -e '/^A/ s/[0-9][0-9]*//'
# smaže první až pátou řádku
sed -e '1,5 d'
# smaže vše krom třetí řádky
sed -e '3 !d'
==== úloha ====
Chceme z konfiguračního souboru zobrazit pouze to podstatné - tedy zbavit se komentářů.
Komentář začíná znakem #.
Zjednodušení zadání: přefiltrovat konfigurák tak, že smažeme řádky začínající #
- Změň jméno "Josef" na "Pepa"
- Smaž první tři řádky
- Vypiš řádky 5 až 10
- Smaž řádky které obsahují "Olomouc"
- Vypiš všechny lidi, kteří mají narozeninu v listopadu, nebo prosinci
- Přidej tři hvězdičky na konec řádek začínajících "Petr"
- Řádkům, které mají nulový den nebo měsíc narozen změň tuto hodnotu na "1"
- Změň řádku obsahující "Martin" na "Martin odjel do USA"
- Změň narození Ilony na 14.12.1981 . Nepoužij k tomu původní datum.
- Napiš sed script (parametr -f file) který:
* nad první řádku (insert) dá "SEZNAM LIDI"
* vymaže data narození pokud se ten člověk narodil v roce 1980
* za poslední řádku ($) dá (append) "KONEC SOUBORU"
Marie Zemanová,Praha,8.6.1986,+420640502304,20386@hotmail.com
Martin Humlíček,Olomouc,6.5.1990,+420643531701,18594@hotmail.com
Emilie Fejlová,České Budějovice,18.0.1983,+420934608096,22163@post.cz
Helena Rousová,Praha,21.2.1991,+420118560678,12075@seznam.cz
Jan Drozd,Ústí nad Labem,23.3.1985,+420824538067,25869@o2mail.cz
Petr Ducheček, Pardubice,14.6.1986,+420109786897,21330@o2mail.cz
Petra Bandurová,Brno,18.3.1994,+420679916072,18899@volny.cz
Ludmila Rudlová,Zlín,15.0.1982,+420069714707,27135@volny.cz
Oldřich Kobza,Havířov,22.7.1991,+420924071657,24265@volny.cz
Zlata Schánilcová,České Budějovice,15.7.1984,+420851059285,26452@post.cz
Josef Dvořák,Pardubice,23.4.1990,+420260167244,29970@post.cz
Jaroslava Potočková,Ostrava,27.2.1982,+420382962474,32471@xmail.cz
Svatoslav Scholze,Olomouc,26.3.1991,+420526571498,3055@volny.cz
Eva Husarová,Praha,0.4.1984,+420038236014,30274@yahoo.com
Zdeněk Jedlička,Hradec Králové,1.7.1983,+420433684645,27640@xmail.cz
Ilona Hoblíková,Plzeň,26.0.1980,+420579591009,18889@o2mail.cz
Jiří Kočař,Plzeň,25.9.1991,+420026453762,28033@xmail.cz
Ondřej Černošek,Praha,27.0.1986,+420033686476,9667@gmail.com
František Šembera,Olomouc,19.6.1981,+420128225404,6151@gmail.com
Jana Honsová,Liberec,20.0.1985,+420534677156,1581@yahoo.com
Josef Čirý,Praha,1.4.1992,+420860928577,18172@yahoo.com