Obsah
Stream Editor (sed)
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.
1. Princip fungování: Pattern Space
`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.
2. Klíčové příkazy a operace
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čí) |
3. Adresování: Cílení na konkrétní řádky
`sed` nemusí provádět změny na všech řádcích. Můžete mu přesně říct, kde má operovat:
- Číslem řádku:
sed '5d' soubor(smaže pouze 5. řádek). - Rozsahem:
sed '1,10s/A/B/' (nahradí A za B pouze na prvních deseti řádcích). - Regulárním výrazem:
sed '/ERROR/d' log.txt(smaže všechny řádky obsahující slovo ERROR).
4. Pokročilá technika: Hold Space
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:
- Prohození pořadí řádků.
- Spojování více řádků do jednoho.
- Vyhledávání vzorů, které přesahují jeden řádek.
5. Praktické využití v automatizaci
Stream editor je klíčem k tzv. Infrastructure as Code.
- Změna konfigurace: Hromadná změna portu ve všech souborech v
/etc/nginx/. - Čištění dat: Odstranění komentářů (řádků začínajících #) ze skriptů:
sed '/^#/d' skript.sh. - Extrakce informací: Získání IP adres z rozsáhlého výpisu síťového provozu.
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).
