GNU/Linux >> Znalost Linux >  >> Linux

Kompletní průvodce příkazy Sed [vysvětleno praktickými příklady]

V předchozím článku jsem ukázal základní použití Sed, editoru streamů, na praktickém případu použití. Dnes buďte připraveni získat více informací o Sed, protože se podíváme na podrobnou prohlídku modelu provádění sed.

Bude to také příležitost provést vyčerpávající přehled všech příkazů Sed a ponořit se do jejich detailů a jemností.

Takže, pokud jste připraveni, spusťte terminál, stáhněte si testovací soubory a pohodlně se posaďte před klávesnici:náš průzkum zahájíme právě teď!

Trocha teorie o Sed

První pohled na model provádění sed

Abyste skutečně pochopili Sed, musíte nejprve porozumět modelu provádění nástroje.

Při zpracování dat Sed čte vždy jeden řádek vstupu a ukládá je do tzv. vzorového prostoru . Všechny Sedovy transformace se vztahují na prostor vzorů. Transformace jsou popsány jednopísmennými příkazy poskytnutými na příkazovém řádku nebo v externím souboru skriptu Sed. Většině příkazů Sed může předcházet adresa nebo rozsah adres, aby se omezil jejich rozsah.

Ve výchozím nastavení Sed vytiskne obsah prostoru vzoru na konci každého cyklu zpracování, tedy těsně před přepsáním prostoru vzoru dalším řádkem vstupu. Tento model můžeme shrnout takto:

  1. Zkuste přečíst další vstupní řádek do prostoru vzoru

Pokud bylo čtení úspěšné:

  1. Použít v pořadí skriptů všechny příkazy, jejichž adresa odpovídá aktuálnímu vstupnímu řádku
  2. Pokud sed nebyl spuštěn v tichém režimu (-n ) vytisknout obsah (potenciálně upraveného) vzorového prostoru
  3. vrátil jsem se na 1.

Vzhledem k tomu, že se obsah vzorového prostoru po zpracování každého řádku ztratí, není vhodný pro dlouhodobé skladování. Za tímto účelem má Sed druhou vyrovnávací paměť, zadržovací prostor . Sed nikdy nevymaže, neuloží ani nezíská data z úložného prostoru, pokud o to výslovně nepožádáte. To prozkoumáme podrobněji později, když budeme studovat příkazy exchange, get and hold.

Abstraktní stroj Sed

Výše vysvětlený model je to, co uvidíte popsané v mnoha výukových programech Sed. Ve skutečnosti je to dost správné, abyste pochopili nejzákladnější programy Sed. Ale když se začnete vrtat do pokročilejších příkazů, uvidíte, že to nestačí. Takže zkusme být teď trochu formálnější.

Ve skutečnosti lze na Sed pohlížet jako na implementaci abstraktního stroje, jehož stav je definován třemi buffery, dvěma registry a dvěma příznaky:

  • tři vyrovnávací paměti pro uložení textu libovolné délky. Ano:tři ! V základním prováděcím modelu jsme mluvili o prostoru vzorů a přidržení, ale Sed má třetí vyrovnávací paměť:frontu připojení . Z pohledu skriptu Sed se jedná o vyrovnávací paměť určenou pouze pro zápis, kterou Sed automaticky vyprázdní v předem definovaných okamžicích svého provádění (obecně řečeno před čtením nového řádku ze vstupu nebo těsně před ukončením).
  • Sed také spravuje dva registry :počítadlo řádků (LC), který uchovává počet řádků přečtených ze vstupu a počítadlo programu (PC), které vždy obsahují index („pozici“ ve skriptu) dalšího příkazu, který se má provést. Sed automaticky inkrementuje PC jako součást své hlavní smyčky. Ale pomocí specifických příkazů může skript také přímo upravit PC tak, aby přeskakoval nebo opakoval části programu. Takto lze pomocí Sed implementovat smyčky nebo podmíněné příkazy. Více o tom v sekci věnované pobočkám níže.
  • Konečně dva příznaky může upravit chování určitých příkazů Sed:příznak automatického tisku (AP) příznak náhrady (SF). Když je příznak automatického tisku nastaven , Sed automaticky vytiskne obsah prostoru vzoru před jeho přepsání (zejména před čtením nového řádku vstupu, ale nejen). Když je příznak automatického tisku prázdný („nenastaveno“), Sed nikdy nevytiskne obsah prostoru vzoru bez explicitního příkazu ve skriptu. Příznak automatického tisku můžete vymazat spuštěním Sed v „tichém režimu“ (pomocí -n příkazového řádku nebo pomocí speciálního komentáře#n na prvním řádku nebo ve skriptu). „Příznak substituce“ se nastavuje příkazem substituce (s příkaz), když jeho adresa i vyhledávací vzor odpovídají obsahu prostoru vzorů. Příznak substituce se vymaže na začátku každého nového cyklu, nebo když je načten nový řádek ze vstupu, nebo po provedení podmíněné větve. Zde se znovu k tomuto tématu podrobně vrátíme v sekci větví.

Kromě toho Sed udržuje seznam příkazů, které zadaly rozsah adres (více o sekci rozsah adres) a také několik popisovačů souborů pro čtení a zápis dat. Některé další informace o tom najdete v popisu příkazu čtení a zápisu.

Přečíst celý příběh

Zbytek článku je k dispozici pouze členům LHB Pro. Nyní se můžete zaregistrovat za 50 $ ročně a přečíst si zbytek tohoto článku a získat ZDARMA přístup ke všem příspěvkům, e-knihám a videokurzům pouze pro členy.

OdebíratUž máte účet?Přihlaste se
Linux
  1. Seřadit pomocí řazení na příkazovém řádku

  2. Echo Command s praktickými příklady

  3. Převeďte řetězec na hexadecimální na příkazovém řádku

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

  2. Multi-tasking na příkazovém řádku s screenie

  3. Použití více vzorů najednou pomocí příkazu Sed

  1. Linux Commands - Kompletní průvodce

  2. Který příkaz v Linuxu [vysvětleno s příklady]

  3. sed vložte řádek s mezerami na konkrétní řádek