Pouze pro návštěvníky našeho blogu Získejte další 3 měsíce zdarma + 10% slevu na tříletý plán YSBLOG10
Chyťte dohodu

Příkaz SED v Linuxu | Kompletní uživatelská příručka (příklady + tipy)

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?

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.conf

2) 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.tail

4) 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.log

5) Převeďte oddělovač CSV z čárky na tabulátor (ne uvnitř uvozovek – zjednodušte to):

sed 's/,/\t/g' data.csv > data.tsv

6) Aktualizujte hodnotu klíče pouze v rámci konkrétního bloku:

sed -E '/<VirtualHost \*:80>/, /<\/VirtualHost>/ s/ServerName .*/ServerName example.org/' vhost.conf

7) Odstranění duplicitních sousedních řádků (jednoduchá deduplikace):

sed '$!N; /^\(.*\)\n\1$/!P; D' file

SED 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í.

Sdílet přes:

Prahlad Prajapati

Prahlad je specialista na webhosting a expert na organický růst zaměřený na SEO z Indie. V digitálním prostoru působí od roku 2019 a pomáhá lidem rozvíjet jejich webové stránky pomocí čistých a udržitelných strategií. Je nadšený pro učení a rychlou adaptaci a věří, že malé detaily vedou k velkému úspěchu. Objevte jeho poznatky o webhostingu a SEO, které vám pomohou vylepšit vaši online prezentaci.

Zanechat komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

Přejděte na začátek