Vytvořeno pro verzi 7 původního unixového operačního systému AT&T, sed
příkaz byl od té doby součástí snad každého OS Unix a Linux. sed
aplikace je editor streamu a na rozdíl od textového editoru neotevře vizuální vyrovnávací paměť, do které se načtou data souboru ke zpracování. Místo toho pracuje se souborem, řádek po řádku, buď podle příkazu zadaného do terminálu, nebo podle řady příkazů ve skriptu.
Instalace
Další zdroje pro Linux
- Cheat pro příkazy Linuxu
- Cheat sheet pro pokročilé příkazy systému Linux
- Bezplatný online kurz:Technický přehled RHEL
- Síťový cheat pro Linux
- Cheat sheet SELinux
- Cheat pro běžné příkazy pro Linux
- Co jsou kontejnery systému Linux?
- Naše nejnovější články o Linuxu
Pokud používáte Linux, BSD nebo macOS, pak již máte GNU nebo BSD sed
nainstalováno. Toto jsou dvě jedinečné reimplementace původního sed
příkaz, a přestože jsou podobné, mohou existovat drobné rozdíly. GNU sed
je obecně považován za nejbohatší sed
a je široce dostupný na kterékoli z těchto platforem.
Pokud nemůžete najít GNU sed
(často nazývané gsed
na systémech jiných než Linux), pak si můžete jeho zdrojový kód stáhnout z webu GNU. Pěkná věc na GNU sed
nainstalovaný je, že jej lze použít pro své další funkce, ale lze jej také omezit tak, aby vyhovoval pouze specifikacím POSIX v sed
, pokud požadujete přenositelnost.
V systému Windows můžete nainstalovat GNU sed
s čokoládou.
Jak Sed funguje
sed
aplikace pracuje vždy na jednom řádku. Protože nemá žádné vizuální zobrazení, vytváří prostor vzoru – prostor v paměti obsahující aktuální řádek ze vstupního proudu (s odstraněnými koncovými znaky nového řádku). Jakmile je prostor vzorů naplněn, vaše pokyny sed
jsou popraveni. Někdy jsou vaše příkazy podmíněné a jindy absolutní, takže výsledky těchto příkazů závisí na tom, jak používáte sed
.
Když je dosaženo konce příkazů, sed
vytiskne obsah prostoru vzorů do výstupního proudu. Výchozí výstupní stream je stdout , ale může být přesměrován do souboru nebo dokonce zpět do stejného souboru pomocí --in-place=.bak
možnost.
Poté cyklus začíná znovu s dalším vstupním řádkem.
Syntaxe pro sed
příkaz je:
$ sed --options [optional SCRIPT] [INPUT FILE or STREAM]
Nalezení toho, co chcete upravit
Ve vizuálním editoru obvykle najdete to, co chcete změnit, v textovém souboru, aniž byste o tom příliš přemýšleli. Vaše oko (nebo čtečka obrazovky) naskenuje text, najde slovo, které chcete změnit, nebo místo, kam chcete vložit nebo odebrat text, a pak už jen začnete psát. Pro sed
neexistuje žádný interaktivní režim , takže mu musíte sdělit, jaké podmínky musí splnit, aby mohl spouštět konkrétní příkazy.
Pro tyto příklady předpokládejme, že jde o soubor s názvem example.txt
obsahuje tento text:
ahoj
světe
Toto je řádek tři.
Zde je poslední řádek.
Číslo řádku
Zadáním čísla řádku sdělíte sed
pracovat pouze na tomto konkrétním řádku v souboru.
Tento příkaz například vybere řádek 1 souboru a vytiskne jej. Protože sed
Výchozí akcí po zpracování je také tisk řádku na stdout , to má za následek duplikování prvního řádku:
$ sed ‘1p’ example.txt
ahoj
ahoj
světe
Toto je řádek tři.
Zde je poslední řádek.
Čísla řádků můžete zadat také v krocích. Například 1~2
označuje, že jsou vybrány každé 2 řádky ("vybrat každý druhý řádek začínající prvním"). Pokyn 1~3
znamená vybrat každý třetí řádek po prvním:
$ sed '1p' example.txt
ahoj
ahoj
svět
Toto je řádek tři.
Zde je poslední řádek.
Zde je poslední řádek.
Pozice čáry
Pomocí $
můžete pracovat pouze s posledním řádkem souboru jako selektor:
$ sed '$p' example.txt
ahoj
světe
Toto je řádek tři.
Zde je poslední řádek.
Zde je poslední řádek .
V GNU sed
, můžete vybrat více než jeden řádek (sed '1,$p'
vytiskne například první a poslední řádek).
Negace
Jakýkoli výběr podle čísla nebo pozice můžete invertovat pomocí vykřičníku (!
) charakter. Tím se vyberou všechny řádky kromě první řádek:
$ sed '1!p' example.txt
ahoj
svět
svět
Toto je řádek tři.
Toto je řádek tři.
Zde je poslední řádek.
Zde je poslední řádek.
Shoda vzorů
Vzorovou shodu si můžete představit jako nález provoz v textovém editoru nebo prohlížeči. Zadáte slovo (vzor ) a vyberou se výsledky. Syntaxe pro shodu vzoru je /pattern/
.
$ sed '/hello/p' example.txt
ahoj
ahoj
svět
Toto je řádek tři.
Zde je poslední řádek.
$ sed '/line/p' example.txt
ahoj
world
Toto je řádek tři.
Toto je řádek tři.
Zde je poslední řádek .
Zde je poslední řádek.
Editace pomocí Sed
Jakmile najdete, co chcete upravit, můžete provést jakoukoli akci, kterou chcete. Úpravy provádíte pomocí sed
s příkazy. Příkazy v sed
se liší od sed
samotný příkaz. Pokud to pomůže, představte si je jako „akce“, „slovesa“ nebo „pokyny.“
Příkazy v sed
jsou jednotlivá písmena, například p
pro tisk příkaz použitý v předchozích příkladech. Zpočátku může být obtížné si je vybavit, ale jako se vším se s nimi seznámíte až praxí.
p pro tisk
Znak p
instrukce vytiskne vše, co se aktuálně nachází ve vzorovém prostoru.
d pro smazání
d
instrukce vymaže prostor vzorů.
$ sed '$d' example.txt
ahoj
svět
Toto je řádek tři.
$ sed '1d' example.txt
svět
Toto je řádek tři.
Zde je poslední řádek.
s pro vyhledávání a nahrazování
s
příkaz vyhledá vzor a nahradí jej něčím jiným. Toto je pravděpodobně nejoblíbenější a příležitostné použití pro sed
a často je to první (a někdy i jediný) sed
příkaz, který se uživatel naučí. Je to téměř jistě nejužitečnější příkaz pro úpravy textu.
$ sed ‘s/world/opensource.com/’
ahoj
opensource.com
Toto je třetí řádek.
Zde je poslední řádek.
Existují speciální funkce, které můžete použít i v nahrazujícím textu. Například \L
převede nahrazující text na malá písmena a \l
udělá to samé pro další postavu. Existují další, které jsou uvedeny v sed
dokumentaci (můžete ji zobrazit pomocí info sed
příkaz).
Speciální znak &
v klauzuli o nahrazení odkazuje na odpovídající vzor:
$ sed ‘s/is/\U&/’ example.txt
ahoj
světe
Toto je řádek tři.
ZDE JE poslední řádek.
Můžete také předat speciální příznaky, které ovlivní, jak s
zpracovává to, co najde. g
(pro globální , pravděpodobně) příznak říká s
chcete-li použít náhradu na všechny nalezené shody na řádku, nikoli pouze na první shodu:
$ sed 's/is/\U&/g' example.txt
ahoj
světe
Toto JE třetí řádek.
ZDE JE poslední řádek.
Mezi další důležité příznaky patří číslo označující, který výskyt shodného vzoru má ovlivnit:
$ sed 's/is/\U&/2' example.txt
ahoj
světe
Toto JE třetí řádek.
Zde je poslední řádek.
w
příznak následovaný názvem souboru zapíše odpovídající řádek do souboru pouze pokud je provedena změna:
$ sed 's/is/\U&/w sed.log' example.txt
ahoj
světe
Toto je řádek tři.
ZDE JE poslední řádek.
$ cat sed.log
Toto je řádek tři.
ZDE JE poslední řádek.
Příznaky lze kombinovat:
$ sed 's/is/\U&/2w sed.log' example.txt
ahoj
světe
Toto JE třetí řádek.
Zde je poslední řádek.
$ cat sed.log
Toto JE třetí řádek.
Skripty
Existuje spousta skvělých stránek s sed
„jednovrstvé“. Poskytnou vám sed
zaměřené na úkoly příkazy k řešení běžných problémů. Nicméně, učení sed
pro sebe vám umožňuje psát své vlastní jednolinky, které lze přizpůsobit vašim konkrétním potřebám.
Skripty pro sed
lze zapsat jako řádky v terminálu nebo je lze uložit do souboru a spustit pomocí sed
sám. Mám tendenci psát malé skripty všechny jako jeden příkaz, protože jen zřídka znovu používám sed
příkazy v reálném životě. Když napíšu sed
skript, je obvykle velmi specifický pro jeden soubor. Například po napsání úvodního návrhu tohoto článku jsem použil sed
standardizovat psaní velkých písmen slova „sed“, a to je úkol, který už pravděpodobně nikdy nebudu muset dělat.
sed
můžete zadat řadu různých příkazů oddělené středníkem (;
).
$ sed ‘3t; s/line/\U&/’ example.txt
ahoj
světe
Toto je ŘÁDEK 3.
Toto je poslední řádek.
Rozsah změn pomocí složených závorek
Pomocí složených závorek můžete také omezit, které výsledky budou ovlivněny ({}
). Když uzavřete sed
příkazy ve složených závorkách, platí pouze pro určitý výběr. Například slovo "řádek" se objeví ve dvou řádcích ukázkového textu. Můžete vynutit sed
ovlivnit pouze poslední řádek deklarováním požadované podmínky shody ($
pro označení posledního řádku) a umístěním s
příkaz, který chcete provést ve složených závorkách ihned poté:
$ sed '$ {s/line/\U&/}' example.txt
ahoj
světe
Toto je řádek tři.
Toto je poslední ŘÁDEK.Naučte se Sed
S
sed
můžete udělat mnohem více než to, co je vysvětleno v tomto článku. Ještě jsem se nedostal k větvení (b
), testy (t
), pozastavení mezera (H
) a mnoho dalších funkcí. Jakoed
,sed
pravděpodobně to není textový editor, který budete používat pro vytváření dokumentů nebo dokonce pro každý skriptovaný úkol, který potřebujete udělat, ale je to výkonná možnost, kterou máte jako uživatel POSIX. Naučte se, jaksed
příkazy jsou strukturované a způsob psaní krátkých skriptů umožňuje rychlé změny velkého množství textu. Přečtěte siinfo
stránky GNUsed
, nebo manuálové stránky BSDsed
a zjistěte, cosed
může udělat pro vás.
Jak používat heredoc jako textový editor 10 příběhů o úspěchu Linuxu z roku 2020, které si musíte přečístLinux