Modul 1 — Základy Linuxu a příkazové řádky
5. Textové nástroje pro každodenní práci (grep, sed, awk, pipes, redirekce)
Zvládnutí klasických textových nástrojů (grep, sed, awk), rour a přesměrování, které DevOps inženýři používají denně k prohledávání logů a zpracování výstupů příkazů.
Úvod a kontext
Velká část práce DevOps inženýra spočívá v prohledávání logů, filtrování
výstupů příkazů a rychlé úpravě textových konfiguračních souborů. Linux k
tomu nabízí sadu malých, ale extrémně mocných nástrojů, které lze skládat
dohromady pomocí rour (pipes) do řetězců zpracovávajících text téměř
libovolně složitě. Tato lekce vás naučí základy grep, sed, awk,
přesměrování vstupu/výstupu a jejich vzájemné kombinování — dovednost, bez
které se žádný provoz serverů neobejde.
Teorie
Filozofie: malé nástroje, roury a přesměrování
Unixová filozofie říká: piš programy, které dělají jednu věc a dělají ji
dobře, a navrhni je tak, aby spolupracovaly. Výstup jednoho příkazu lze
přesměrovat jako vstup druhého pomocí znaku roury | (pipe):
prikaz1 | prikaz2 | prikaz3
Standardní vstup/výstup lze také přesměrovat do/ze souboru:
>— přesměruje standardní výstup do souboru (přepíše obsah).>>— přesměruje standardní výstup do souboru (připojí na konec).<— použije soubor jako standardní vstup.2>— přesměruje standardní chybový výstup (stderr) do souboru.2>&1— přesměruje stderr na stejné místo jako stdout (užitečné pro
zachycení všeho do jednoho logu).
echo "test" > soubor.txt # přepíše soubor.txt obsahem "test"
echo "další řádek" >> soubor.txt # připojí na konec
prikaz > vystup.log 2>&1 # zachytí normální i chybový výstup do log souboru
grep — hledání vzorů v textu
grep (Global Regular Expression Print) prohledává vstup a vypisuje
řádky odpovídající vzoru:
grep "chyba" aplikace.log # vypíše řádky obsahující "chyba"
grep -i "error" aplikace.log # bez ohledu na velikost písmen (-i)
grep -v "debug" aplikace.log # vypíše řádky, které vzor NEobsahují (-v)
grep -c "warning" aplikace.log # jen spočítá odpovídající řádky (-c)
grep -n "timeout" aplikace.log # zobrazí i čísla řádků (-n)
grep -r "TODO" ./src # rekurzivní prohledávání celého adresáře
grep -E "error|warning|fatal" log # rozšířené regulární výrazy, alternativa přes "|"
Regulární výrazy umožňují hledat vzory, ne jen doslovný text — např.
grep -E "^[0-9]{3}" najde řádky začínající třímístným číslem (typicky
HTTP status kódem).
sed — proudový editor pro nahrazování textu
sed (Stream Editor) zpracovává text řádek po řádku a nejčastěji se
používá pro hromadné nahrazování:
sed 's/http/https/' konfig.txt # nahradí PRVNÍ výskyt "http" na řádku
sed 's/http/https/g' konfig.txt # nahradí VŠECHNY výskyty na řádku (g = global)
sed -i 's/DEBUG=True/DEBUG=False/' .env # -i = úprava přímo v souboru (in-place)
sed -n '5,10p' soubor.txt # vypíše jen řádky 5 až 10
sed '/^#/d' konfig.txt # smaže (d) řádky začínající "#" (komentáře)
Pozor na -i bez zálohy — přepisuje soubor bez zpětného dotazu; při
nejistotě je bezpečnější nejprve spustit bez -i a zkontrolovat výstup,
případně použít sed -i.bak (uloží zálohu s příponou .bak).
awk — zpracování strukturovaného textu po sloupcích
awk je celý miniprogramovací jazyk pro zpracování textu rozděleného do
sloupců (typicky mezerami nebo jiným oddělovačem):
# Vypíše první a třetí sloupec (ceny odděleny mezerou)
awk '{print $1, $3}' data.txt
# Sečte hodnoty ve druhém sloupci CSV souboru (oddělovač čárka)
awk -F',' '{sum += $2} END {print sum}' prodeje.csv
# Vypíše jen řádky, kde je 5. sloupec (velikost odpovědi) větší než 1000
awk '$5 > 1000 {print $0}' access.log
# Spočítá počet výskytů jednotlivých HTTP status kódů (9. sloupec) v Nginx logu
awk '{print $9}' access.log | sort | uniq -c | sort -rn
Poslední ukázka je klasický DevOps vzor: awk vytáhne sloupec, sort
seřadí hodnoty tak, aby stejné byly vedle sebe, uniq -c je sečte a druhé
sort -rn seřadí výsledek sestupně podle počtu — během pár vteřin tak
zjistíte, které chybové kódy se v logu vyskytují nejčastěji.
Další užitečné nástroje v řetězcích
sort— řadí řádky (-nčíselně,-rsestupně,-uunikátní).uniq— odstraní/spočítá po sobě jdoucí duplicitní řádky (typicky za
sort, protože pracuje jen na sousedních řádcích).cut— vyřízne sloupce podle oddělovače nebo pozice znaků
(cut -d: -f1 /etc/passwdvypíše jen jména uživatelů).wc— počítá řádky/slova/znaky (wc -l soubor.txtspočítá řádky).tail -f soubor.log— sleduje rostoucí soubor v reálném čase (klasika
pro živé sledování logů).xargs— převede řádky ze standardního vstupu na argumenty příkazu
(find . -name "*.tmp" | xargs rm).
Praktický příklad
Scénář: v přístupovém logu Nginx (access.log) chceme najít všechny
požadavky se stavovým kódem 500 a zjistit, které IP adresy je posílají
nejčastěji.
Ukázkový formát řádku logu:
10.0.0.5 - - [16/Sep/2026:10:15:32] "GET /api/orders HTTP/1.1" 500 128
# Nejprve najdeme všechny řádky se stavovým kódem 500
$ grep " 500 " access.log | head -5
10.0.0.5 - - [16/Sep/2026:10:15:32] "GET /api/orders HTTP/1.1" 500 128
10.0.0.7 - - [16/Sep/2026:10:16:01] "GET /api/orders HTTP/1.1" 500 128
...
# Vytáhneme první sloupec (IP adresu) jen z chybových řádků,
# seřadíme, sečteme duplicity a seřadíme sestupně podle počtu
$ grep " 500 " access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -5
42 10.0.0.5
17 10.0.0.7
3 10.0.0.9
# Uložíme problematické IP adresy do souboru pro další zpracování
# (např. přidání do blacklistu firewallu)
$ grep " 500 " access.log | awk '{print $1}' | sort -u > podezrele_ip.txt
# Opravíme konfiguraci: zvýšíme timeout u dané lokace přímo v souboru
$ sudo sed -i 's/proxy_read_timeout 30s;/proxy_read_timeout 90s;/' /etc/nginx/sites-available/appka
# Ověříme, že se změna skutečně provedla
$ grep "proxy_read_timeout" /etc/nginx/sites-available/appka
proxy_read_timeout 90s;
# Znovu načteme konfiguraci Nginx bez výpadku (viz předchozí lekce o systemd)
$ sudo systemctl reload nginx
Shrnutí
grep, sed a awk jsou tři pilíře textového zpracování v Linuxu — grep
hledá řádky podle vzoru, sed je proudově upravuje (typicky nahrazuje
text), awk zpracovává strukturovaná data po sloupcích. Spojením těchto
nástrojů pomocí roury | a doplněním o sort, uniq, cut či wc
vznikají krátké, ale mocné jednořádkové příkazy pro analýzu logů a dat.
Přesměrování (>, >>, 2>&1) umožňuje ukládat výstupy do souborů a
oddělovat běžný a chybový výstup. Tato kombinace je jedním z nejčastěji
používaných nástrojů v každodenní DevOps praxi.
Kontrolní otázky
- Co dělá příkaz
grep -v "debug" log.txta čím se liší odgrep "debug" log.txt? - Napište příkaz
sed, který v souboruconfig.ininahradí všechny
výskyty textustagingtextemproductionpřímo v souboru. - K čemu slouží kombinace
sort | uniq -c | sort -rna proč sesort
volá dvakrát? - Jaký je rozdíl mezi přesměrováním
>a>>?
Lekce na sebe nejsou zamčené — libovolnou lekci můžete otevřít i označit jako hotovou v jakémkoliv pořadí.