Linuxové příkazy
sed: Úpravy streamů bez otevření editoru
sed upravuje bokem: procházejí jím celé proudy textu, vycházejí transformované a neotevře se žádný editor. Jeho reputace pochází z -i, které mění jednořádkovou substituci na dávkovou operaci s tisíci soubory, a z příběhů o katastrofách administrátorů, kteří to spustili bez záložní přípony. Bezpečný pracovní postup se nikdy nemění: spusťte substituci jako viditelnou, potvrďte výstup, poté přidejte -i s příponou a ponechte výstupní kód.
Klíčové body
- Náhled před potvrzením: soubor sed -n '10,20p' zobrazuje rozsah řádků a stejná kombinace -n plus p vytiskne pouze řádky, které odpovídají regulárnímu výrazu nebo adrese.
- Nahraďte příznaky, které dělají to, co máte na mysli: s/starý/nový/g pro všechny shody, číslo jako 2g jen pro sekundu a -E pro rozšířený regulární výraz bez stránky úniků zpětného lomítka.
- Úpravy na místě mají příponu, žádné výjimky: aplikace sed -i.bak 's/http:/https:/g' uchovává zálohu se stejným názvem vedle každé změny; tato přípona zachránila více nasazení než historie zrušení jakéhokoli editoru.
- Oddělovače jsou zdarma: s|/var/www|/srv/app|g (nebo s#...#g) se vyhýbá bojům s útěkem, když je váš vzor plný cest.
- -i není atomické: selhání nebo špatný regex uprostřed dávky jednou zanechaly napůl přepsané soubory, takže hromadné úlohy běží proti kopiím nebo stromům sledovaným git, nikdy proti jediné kopii.
- GNU a BSD sed nesouhlasí na -i: BSD vyžaduje příponu před skriptem (sed -i '' funguje na macOS, není syntaxí Linuxu), což je další důvod, proč se přenosné skripty úplně vyhýbají -i.
- Smazat a izolovat jsou poctivá slovesa: 'd' odstraňuje odpovídající řádky (sed '/^#/d' odstraňuje komentáře) a -n s rozsahem izoluje sekci; oba se čtou lépe než chytré substituce.
- Cokoli po jednořádkových úpravách, doslovných víceřádkových blokech nebo stavových spojeních patří do awk nebo skutečného skriptu; donucení sed dělat programátorskou práci je způsob, jak se rodí nečitelné jednolinky.
Poznámka z terénu
Můj první sed -i bez přípony .bak narazil na produkční konfiguraci nginx těsně před odpolední špičkou provozu. Od té doby každá editace na místě nese záložní příponu a já četl výstup suchého běhu ještě předtím, než se -i přiblíží k příkazu.
Časté dotazy
Jak upravím pouze řádky, které odpovídají něčemu jinému?
Oslovte je: sed '/cache/s/true/false/' překlopí true na false pouze na řádcích mezipaměti a rozsahy jako '/<VirtualHost>/,/<\/VirtualHost>/s/Old/New/g' rozsah úprav do bloků; adresa je první, příkaz druhý.
Proč se sed nebude shodovat s konci řádků v souboru upraveném systémem Windows?
Tyto řádky končí znaky pro návrat vozíku, které kotvy '$' neočekávají; odstraňte je nejprve pomocí tr nebo normalizujte na cestě dovnitř a víceřádkový obsah stále patří do awk nebo Perl s -0777.
Je sed rychlejší než awk pro jednoduché výměny?
Okrajově a irelevantně; oba skončí v milisekundách u souborů o velikosti config. Vybírejte podle čitelnosti, protože kolega musí vaši jednolinku rozbalit za šest měsíců.
Mohu vložit celé konfigurační bloky pomocí sed?
Ano: 'a' se připojuje za, 'i' vkládá před a 'c' nahrazuje řádek, ale vkládaný text je jednoduchý a jednoúčelový; skutečné bloky patří do souboru šablony nebo do správného kroku zřizování.
Jak Kinetikatech pomáhá s linuxové příkazy
Nemusíte se stát odborníkem na linuxové příkazy: Příkazy a skriptovací návyky, které rozhodují o tom, zda správce provozuje server nebo s ním bojuje: prohledávejte, transformujte, přenášejte a dohlížejte na text a procesy pomocí nástrojů, které jsou součástí každé základní instalace. Přesně proto existuje Zabezpečení linuxových serverů a Správa serverů: zprovoznění, zpevnění, monitoring a člověk ve službě dnem i nocí.