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.
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'
q
… ukončit d
… 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.
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'
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í #
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