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áte sed k ú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).

Zpět na Linux