Příkaz SED v Linuxu je neinteraktivní editor streamů, který čte vstup řádek po řádku, aplikuje textové transformace pomocí vzorů a pravidel a zapisuje výsledek na standardní výstup nebo zpět do souborů.
Používejte sed pro hledání a nahrazování, výběr řádků, mazání, vkládání a rychlou automatizaci ve skriptech, pipelinech a administraci serveru.
Pokud s příkazem sed v Linuxu teprve začínáte, tato uživatelská příručka vás provede vším od základní syntaxe až po praktické stručné fráze používané při hostování, DevOps a úlohách správce systémů.
Naučíte se základy sed, pokročilé techniky a bezpečné úpravy na místě, vysvětlené pomocí jednoduchých příkladů, které můžete ihned spustit.
Co je příkaz SED v Linuxu?

sed (zkratka pro stream editor) je výkonný textový nástroj pro filtrování a transformaci textu. Je ideální pro dávkové úpravy, automatizaci změn konfigurace, čištění protokolů, extrakci dat a integraci do skriptů shellu.
Na rozdíl od textového editoru upravuje sed streamy, data proudící ze souborů nebo příkazů – díky čemuž je ideální pro pipeline a neinteraktivní operace.
Jak SED Díla: Stream Model a Core Syntax
Základní syntaxe
SED Zpracovává vstup řádek po řádku, aplikuje příkazy na každý řádek, který odpovídá adrese nebo vzoru, a vypíše výsledek. Obecný tvar:
sed [OPTIONS] 'address(es) command(s)' file(s)
# Common usage examples
sed 's/old/new/' file.txt # Replace first 'old' on each line
sed -n '1,10p' file.txt # Print only lines 1 through 10
sed '/error/d' app.log # Delete lines that match 'error'
- na: potlačit automatický tisk (použít s p pro řízení výstupu)
- -i[PŘÍPONA]: upravovat soubory na místě (volitelně s příponou zálohy, např. -i.bak)
- -A: používat rozšířené regulární výrazy (upřednostňované před starším -r)
- -f skript.sed: načíst příkazy ze souboru
- -e 'příkaz': přidat více příkazů přímo do textu
Adresy a rozsahy
Adresy vám umožňují cílit na konkrétní řádky. Můžete použít čísla řádků, vzory regulárních výrazů nebo rozsahy:
# Line numbers
sed -n '5p' file # Print line 5
sed -n '5,12p' file # Print lines 5 through 12
# Regex addresses (delimited by /.../)
sed -n '/ERROR/p' log # Print lines containing 'ERROR'
sed '/^#/d' config # Delete commented lines
# Mixed ranges and address negation
sed '/START/,/END/p' file # Print between lines matching START and END
sed '/^$/!p' file # Print all non-empty lines (! negates the address)
Základní příkazy SED s praktickými příklady
Výběr a tisk řádků (p, -n, q, =)
# Print only matching lines (-n + p)
sed -n '/nginx/p' /etc/nginx/nginx.conf
# Show line numbers for matches
sed -n '/PermitRootLogin/=' /etc/ssh/sshd_config
# Stop after first match (faster on huge files)
sed '/CRITICAL/q' app.log
Najít a nahradit text (s///)
Náhradní příkaz s/regex/repl/flags vyhledá shody a nahradí je. Použijte jiný oddělovač, abyste se vyhnuli silnému escapování.
# Replace first match per line
sed 's/foo/bar/' file
# Replace all matches per line (global)
sed 's/foo/bar/g' file
# Case-insensitive replace (GNU sed)
sed 's/linux/Linux/Ig' notes.txt
# Use an alternate delimiter to avoid escaping slashes (e.g., paths)
sed 's#/var/www/html#/srv/www#' vhost.conf
# Replace only on lines that match an address
sed '/^server_name/s/example.com/example.org/' site.conf
# Replace only the 2nd occurrence per line
sed 's/foo/bar/2' input.txt
# Use captured groups and the & (whole match)
sed -E 's/([0-9]{3})-([0-9]{2})-([0-9]{4})/***-**-\3/g' data.txt
sed -E 's/error:<([^>]+)>/issue:&[\1]/' log.txt
Vkládání, přidávání a změna řádků (i, a, c)
# Insert a line before matches
sed '/^\[mysqld\]/i # Managed by automation' my.cnf
# Append a line after matches
sed '/listen 80;/a listen 443 ssl;' nginx.conf
# Change matching lines entirely
sed '/^DocumentRoot/c DocumentRoot "/srv/www/example"' httpd.conf
Smazat řádky (d)
# Remove comments and empty lines
sed -E '/^\s*($|#)/d' file
# Delete a known range
sed '10,20d' file
# Delete everything outside a block (negate the range)
sed '/BEGIN/,/END/!d' file
Více úprav najednou (-e, ;, -f)
# Chain commands with -e
sed -E -e 's/\s+$//' -e 's/^\s+//' input.txt
# Or separate with semicolons
sed -E 's/\s+$//; s/^\s+//' input.txt
# Load from a script file
sed -f fixup.sed input.txt
# Example fixup.sed:
# s/localhost/127.0.0.1/g
# /^#/d
# /^\s*$/d
Bezpečná úprava na místě (-i) a tipy pro přenositelnost
Úprava souborů na místě je pohodlná, ale riskantní, pokud vynecháte zálohy. Nejprve proveďte zkušební spuštění a poté je aplikujte na místě s příponou zálohy.
# Dry run: preview changes
sed -E 's/http:/https:/g' site.conf | diff -u site.conf -
# Linux (GNU sed): create a backup
sed -i.bak 's/PermitRootLogin no/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config
# macOS/BSD sed: empty string means no backup
sed -i '' -E 's#<Directory /var/www>#<Directory /srv/www>#' httpd.conf
Poznámky k přenositelnosti:
- Pro rozšířený regulární výraz použijte -E. Na starších GNU sed funguje i -r; na BSD/macOS preferujte -E.
- Příznak I pro nerozlišování velkých a malých písmen je GNU sed. Pro přenositelnost přednormalizujte velká a malá písmena nebo použijte třídy znaků.
- macOS vyžaduje -i ” pro bez zálohy; GNU sed akceptuje -i bez argumentu.
Pokročilý SED: Regex, víceřádkové operace a Hold Space
Rozšířené regulární výrazy a zpětné odkazy
S -E získáte moderní funkce regulárních výrazů, jako jsou +, ?, | a seskupování bez zpětných lomítek. Zpětné odkazy umožňují znovu použít zachycené skupiny v náhradách. Symbol & se rozbalí na celou shodu.
# Normalize repeated whitespace to a single space
sed -E 's/[[:space:]]+/ /g' file
# Swap first and last name
sed -E 's/^([A-Za-z]+)\s+([A-Za-z]+)$/\2 \1/' names.txt
# Keep only digits from each line
sed -E 's/[^0-9]+//g' data.txt
Víceřádkové úpravy (N) a spojování řádků
Ve výchozím nastavení sed pracuje na řádek. Pomocí N připojíte další řádek do prostoru vzorů a operujete přes hranice řádků.
# Join pairs of lines with a space
sed 'N; s/\n/ /' file
# Remove blank lines that follow another blank line (collapse multiple blanks)
sed -E ':a; /^\s*$/N; s/^\s*\n+/\n/; ta' file
# Replace a token that may be split across two lines
sed 'N; s/TOKEN\nCONTINUED/TOKEN CONTINUED/; P; D' file
Triky s držením prostoru (h, H, g, G, x)
SED má dva buffery: prostor vzoru (aktuální řádek) a prostor pro uchování (zápisník). Pro pokročilou logiku přesouvejte data mezi nimi.
# Print each line along with the previous line
sed '1!G; h; $!p' file
# Swap current and previous lines
sed 'x; 1!p; h' file
Větvení a podmíněné nahrazování (b, t)
Větvení na popisky pro vytvoření podmíněných toků. Příkaz t se větví pouze v případě úspěšné substituce.
# If we replaced 'alpha', also replace 'beta' on the same line
sed -E ':start; s/alpha/A/g; t next; b end; :next s/beta/B/g; :end' file
Jednořádkové věty o SED pro systémové administrátory a DevOps z reálného světa
Tyto praktické příklady řeší běžné úkoly na servery a v CI/CD potrubí.
1) Odstraňte komentáře a koncové mezery z konfigurací:
sed -E 's/\s+$//; /^\s*($|#)/d' config.conf2) Hromadný upgrade HTTPS v Nginx virtuální hostitelé:
find /etc/nginx/sites-available -type f -name '*.conf' -print0 \
| xargs -0 sed -i.bak 's/http:/https:/g'3) Otáčejte protokoly tak, že ponecháte posledních 1000 řádků:
sed -n -e :a -e '$q;N;101,$D;ba' app.log > app.log.tail4) Zamaskujte uživatelská jména e-mailů kvůli soukromí v protokolech:
sed -E 's/([A-Za-z0-9._%+-])[A-Za-z0-9._%+-]*(@[A-Za-z0-9.-]+\.[A-Za-z]{2,})/\1***\2/g' access.log5) Převeďte oddělovač CSV z čárky na tabulátor (ne uvnitř uvozovek – zjednodušte to):
sed 's/,/\t/g' data.csv > data.tsv6) Aktualizujte hodnotu klíče pouze v rámci konkrétního bloku:
sed -E '/<VirtualHost \*:80>/, /<\/VirtualHost>/ s/ServerName .*/ServerName example.org/' vhost.conf7) Odstranění duplicitních sousedních řádků (jednoduchá deduplikace):
sed '$!N; /^\(.*\)\n\1$/!P; D' fileSED vs. awk vs. grep: Kdy který použít
- Použijte grep k filtrování řádků podle vzoru. Je to rychlé, jednoduché a nejlepší pro čisté porovnávání.
- Použijte sed k transformaci textových streamů: hledání/nahrazení, mazání/vkládání řádků, malá logika a rychlé jednořádkové vtipné hlášky.
- Používejte awk pro zpracování s ohledem na sloupce, výpočty a strukturované výstupy (například sestavy CSV/TSV).
V mnoha pipelinech je kombinujete: grep zužuje data, sed čistí/formátuje, awk agreguje nebo vypočítává.
Výkon a osvědčené postupy
- Před úpravami na místě otestujte s -n a p. Pro jistotu je spárujte s diff.
- Příkazy citujte v jednoduchých uvozovkách, abyste zabránili rozbalení shellu: 's/$HOME/…/' nikoli „s/$HOME/…/“.
- Použijte inteligentní oddělovače (| # ~), abyste se vyhnuli řídicím lomítkům v cestách a URL adresách.
- Ukotvěte vzory pomocí znaků ^ a $ pro snížení falešně pozitivních výsledků a urychlení porovnávání.
- Pro přehlednější syntaxi regulárních výrazů preferujte -E. Výrazy udržujte čitelné.
- U rozsáhlých úloh ukládejte pravidla do souboru .sed (-f). Tím se zlepší údržba a rychlost.
- Pro rychlejší bajtové zpracování, pokud nejsou vyžadována pravidla Unicode, nastavte LC_ALL=C.
- Pozor na přenositelnost: Rozdíly mezi parametry -i a regex v GNU a BSD.
Bezpečné procvičování na testovacím serveru
Pokud dávkově upravujete konfigurace nebo protokoly pomocí sed, nejprve je otestujte v testovacím prostředí. YouStable VPS, získáte plný root přístup, zálohy snapshotů a SSH ihned po vybalení z krabice – takže si můžete vyzkoušet jednoduché tipy, okamžitě se vrátit zpět a s jistotou zavést změny do produkčního prostředí. Je to jednoduché způsob, jak se vyhnout riskantním úpravám na živých serverech.
Tahák SED: Příkazy, které budete používat denně
- Tisk: -n 'adresa p' soubor
- Najít a nahradit: 's/starý/nový/g'
- Vymazat: 'adresa d'
- Vložit/Přidat: 'adresa i text' / 'adresa textu'
- Změna řádku: 'adresa c text'
- Čísla řádků: '='
- Více příkazů: -e 'cmd1' -e 'cmd2' nebo 'cmd1; cmd2'
- Rozšířený regulární výraz: -E
- Úprava na místě: -i[.bak]
Běžná úskalí a jak se jim vyhnout
- Náhodné globální změny: Začněte s úzkou adresou a poté rozšiřte rozsah.
- Problémy s citováním: Používejte jednoduché uvozovky; escapujte pouze to, co sed potřebuje.
- Přepisování bez zálohování: Vždy používejte -i.bak nebo správu verzí.
- Regex chamtivost: Pro přesné shody použijte kotvy a třídy znaků.
- Nesoulad platformy: Úprava příznaků -i a regex v macOS vs. GNU/Linux.
Nejčastější dotazy
K čemu se v Linuxu používá příkaz SED?
SED je editor streamů, který automatizuje textové transformace, jako je vyhledávání a nahrazování, mazání nebo vkládání řádků a formátování. Je široce používán v shellových skriptech, CI/CD pipeline, čištění protokolů a konfiguraci. management, protože je rychlý, skriptovatelný a funguje řádek po řádku bez nutnosti otevírat editor.
Jak mohu rekurzivně nahradit text ve všech souborech pomocí SED?
Pro bezpečné, rekurzivní úpravy zkombinujte find s sed -i:
najít . -type f -name '*.conf' -print0 \
| xargs -0 sed -i.bak 's/stará.domena/nová.domena/g'
Tím se každý soubor zálohuje s příponou .bak. Před odstraněním záloh zkontrolujte změny pomocí příkazu git diff nebo diff.
Jaký je rozdíl mezi GNU SED a BSD/macOS SED?
Mezi klíčové rozdíly patří syntaxe úprav na místě (-i ” v macOS vs. -i v GNU) a některé příznaky (GNU podporuje I pro s/// bez rozlišení velkých a malých písmen). Rozšířený regulární výraz je -E v BSD/macOS a je také podporován v moderním GNU sed. Při psaní skriptů napříč platformami otestujte přenositelnost.
Jak mohu upravit soubor na místě bez vytvoření zálohy?
V GNU/Linuxu použijte -i bez přípony. V macOS/BSD předejte prázdný řetězec:
# GNU/Linux
soubor sed -i 's/http:/https:/g'
# macOS/BSD
sed -i ” soubor 's/http:/https:/g'
Jak mohu použít rozšířený regulární výraz s SED?
Použijte -E pro povolení rozšířených regulárních výrazů, abyste mohli psát čistší vzory bez nadměrného escapování:
sed -E 's/([A-Za-z]+)\s+([A-Za-z]+)/\2 \1/' jména.txt
Jak nahradím pouze n-tý výskyt na řádku?
Přidejte číslo výskytu jako příznak k příkazu s. Tento příklad nahrazuje pouze druhý výskyt na řádek:
sed 's/error/warning/2' log.txt
Je SED rychlejší než awk nebo Python pro jednoduché náhrady?
Pro základní vyhledávání a nahrazování nebo filtrování řádků je sed obvykle rychlejší a spotřebovává méně paměti než awk nebo Python kvůli minimálním režijním nákladům při spouštění a streamování. Pro strukturované parsování nebo výpočty může být awk/Python vhodnější i přes kompromis ve výkonu.
Závěr
S těmito technikami a osvědčenými postupy můžete s jistotou používat SED. příkaz v Linuxu automatizovat zpracování textu, refaktorovat konfigurace a zefektivnit pracovní postupy serveru. Pokud chcete bezpečné herní prostředí se snímky a kompletním SSH, zvažte testování na YouStable VPS před zavedením změn do produkčního prostředí.