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čitd
… smaže řádeka
… 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