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 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í:

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


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í #


Úkol:

  1. Změň jméno "Josef" na "Pepa"
  2. Smaž první tři řádky
  3. Vypiš řádky 5 až 10
  4. Smaž řádky které obsahují "Olomouc"
  5. Vypiš všechny lidi, kteří mají narozeninu v listopadu, nebo prosinci
  6. Přidej tři hvězdičky na konec řádek začínajících "Petr"
  7. Řádkům, které mají nulový den nebo měsíc narozen změň tuto hodnotu na "1"
  8. Změň řádku obsahující "Martin" na "Martin odjel do USA"
  9. Změň narození Ilony na 14.12.1981 . Nepoužij k tomu původní datum.
  10. 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"




lide.csv:

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