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

  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“
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
Nahoru