GNU/Linux >> Znalost Linux >  >> Linux

Naučte se používat textový editor Sed

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í. Jako ed , 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, jak sed 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 si info stránky GNU sed , nebo manuálové stránky BSD sed a zjistěte, co sed může udělat pro vás.


Linux
  1. 6 Linuxových metaznaků, které rád používám na příkazovém řádku

  2. Jak používat heredoc jako textový editor

  3. Jak vložit text na začátek souboru?

  1. Jak používat příkaz sed pro Linux

  2. Pokročilé použití prohlížeče méně textových souborů v Linuxu

  3. Manipulace s textem na příkazovém řádku pomocí sed

  1. Jak vložit text před první řádek souboru?

  2. Připojit odpovídající text k řádku?

  3. Jak používat textový editor na InstantSite.