Stream Editor je nástroj určený k transformaci a filtrování textu, který protéká systémem jako proud dat (stream). Na rozdíl od běžných textových editorů nepracuje interaktivně; místo toho načítá data ze souboru nebo standardního vstupu, provede úpravy podle předem definovaných instrukcí a výsledek okamžitě odesílá dál.
`sed` pracuje ve velmi specifickém cyklu:
1. **Načtení:** Přečte jeden řádek ze vstupu a uloží ho do dočasné paměti zvané **pattern space**. 2. **Zpracování:** Aplikuje na tento řádek všechny zadané příkazy (např. nahrazení textu). 3. **Výstup:** Upravený řádek vypíše na obrazovku (nebo do roury) a vymaže pattern space. 4. **Opakování:** Přejde na další řádek.
Kromě základního nahrazování (s/), které jsme již probrali, nabízí `sed` řadu dalších možností:
| Příkaz | Význam | Příklad použití |
|---|---|---|
| a (append) | Přidá text za aktuální řádek. | sed '2a Nový řádek' soubor |
| i (insert) | Vloží text před aktuální řádek. | sed '1i Hlavička' soubor |
| c (change) | Nahradí celý řádek novým textem. | sed '3c Změněný řádek' soubor |
| q (quit) | Ukončí zpracování po určitém řádku. | sed '10q' soubor (vypíše prvních 10 řádků a skončí) |
`sed` nemusí provádět změny na všech řádcích. Můžete mu přesně říct, kde má operovat:
sed '5d' soubor (smaže pouze 5. řádek).sed '1,10s/A/B/' (nahradí A za B pouze na prvních deseti řádcích).sed '/ERROR/d' log.txt (smaže všechny řádky obsahující slovo ERROR).Kromě hlavní paměti (pattern space) má `sed` ještě druhou, „odkládací“ paměť zvanou hold space. To mu umožňuje provádět složité operace, jako je:
Stream editor je klíčem k tzv. Infrastructure as Code.
/etc/nginx/.sed '/^#/d' skript.sh.Tip: Pokud používátesedk úpravě cest (kde jsou lomítka), můžete místo klasického oddělovače/použít téměř jakýkoli jiný znak, například:sed 's|/usr/bin|/usr/local/bin|'. Tím se vyhnete nepřehlednému „escapování“ lomítek (tzv. Leaning Toothpick Syndrome).