GNU/Linux >> Znalost Linux >  >> Linux

10 Sed (Editor streamu) Příklady příkazů

Sed je stream editor v operačním systému podobnému UNIXu, který se používá pro filtrování a transformaci textu. Sed je původně odvozen od základního editoru řádků ‚ed‘, editoru, který najdete na každém unixovém systému, ale který se používá jen zřídka kvůli jeho obtížnému uživatelskému rozhraní.

Jak sed funguje?

Protože sed je streamový editor, svou práci vykonává na proudu dat, který přijímá od stdin, například prostřednictvím roury, zapisuje své výsledky jako proud dat na stdout (často na ploše). Tento výstup můžeme přesměrovat do souboru . Sed obvykle neupravuje původní vstupní soubor; místo toho můžeme poslat obsah našeho souboru potrubím ke zpracování pomocí sed. To znamená, že nepotřebujeme mít na disku soubor s daty, která chcete změnit, což je zvláště užitečné, pokud máte data pocházející z jiného procesu a nikoli již zapsaná v souboru.

Syntaxe sed

# sed [option] commands [input-file]

V tomto příspěvku probereme některé praktické příklady příkazu sed, budeme provádět mnoho operací sed se souborem 'passwd', takže nejprve zkopírujte soubor '/etc/passwd' do složky /tmp.

# cp /etc/passwd /tmp/

Příklad 1:Odstranění všech řádků pomocí sed

# cat /tmp/passwd | sed 'd'

Příkaz výše odeslal celý obsah souboru /tmp/passwd potrubím do sed. Mějte na paměti, že soubor /tmp/passwd nebyl vůbec změněn. Sed pouze četl obsah souboru a my jsme mu neřekli, aby do souboru zapisoval, pouze z něj četl. Výsledky editačních příkazů na každém řádku vytištěny na standardní výstup. V tomto případě se na obrazovku nic nevytisklo, protože jsme použili možnost „d“ k odstranění každého řádku.

Příklad 2:Vyvolání sed s volbou „-e“ (přidání skriptu k příkazům, které se mají provést)

Namísto vyvolání sed odesláním souboru do něj prostřednictvím kanálu můžeme sed přikázat, aby četl data ze souboru, jak je znázorněno v příkladu níže.

# sed -e 'd' /tmp/passwd
#

Vyvolání sed tímto způsobem explicitně definuje editační příkaz jako sed skript, který se má provést na vstupním souboru /tmp/passwd. Skript je zde jednoduše jednoznakový editační příkaz, ale mohl by být mnohem větší.

Můžeme také přesměrovat standardní výstup z příkazu sed do souboru.

# sed -e 'd' /tmp/passwd > /tmp/new-passwd

Příklad 3:Tisk řádků pomocí sed (-n flag &p příkaz)

Příznak ‚-n‘ zakáže automatický tisk, takže sed místo toho vytiskne řádky pouze tehdy, když je k tomu výslovně vyzván příkazem ‚p‘.

# cat /tmp/passwd | sed 'p' | head -5
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin

Jak vidíme výše, pokud zadáme editační příkaz ‚p‘ bez příznaku ‚-n‘, sed vytiskne duplicitní řádky. Chcete-li tedy zobrazit jedinečné řádky, použijte příznak „-n“ s příkazem p v sed. Příklady jsou uvedeny níže:

# cat /tmp/passwd | sed -n 'p' | head -5
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync

Příklad 4:Úprava zdrojového souboru pomocí volby „-i“

Příkaz Sed ve výchozím nastavení neupravuje původní nebo zdrojový soubor z důvodu naší bezpečnosti, ale pomocí volby „-i“ lze zdrojový soubor upravit.

# sed -i '1d' /tmp/passwd

Výše uvedený příkaz smaže první řádek zdrojového souboru /tmp/passwd.

Příklad 5:Proveďte zálohu zdrojového souboru před úpravou

Když použijeme volbu „-i“ v příkazu sed, stane se to velmi riskantní, protože bude přímo upravovat zdrojový soubor, takže je lepší si před úpravou zdrojového souboru zálohovat, příklad je uveden níže.

# sed -i.bak '1d' /tmp/passwd
# ls -l /tmp/passwd*
-rw-r--r-- 1 root root 2229 Nov 24 22:36 /tmp/passwd
-rw-r--r-- 1 root root 2261 Nov 24 22:35 /tmp/passwd.bak

Ve výše uvedeném příkazu sed bude odstraněn 1. řádek souboru /tmp/passwd, ale předtím příkaz sed provede zálohu /tmp/passwd jako /tmp/passwd.bak.

Příklad 6:Odstranění řádků zadáním rozsahu.

Smazání prvních 5 řádků souboru /tmp/passwd.

# cat /tmp/passwd | sed '1,5d'

Příklad 7:Smazání prázdných řádků souboru

# cat /tmp/detail.txt 
245
678

linux
unix

suse

V souboru details.txt máme dva prázdné řádky, pro smazání prázdných řádků použijte příkaz níže.

# sed '/^$/d' /tmp/detail.txt
245
678
linux
unix
suse

Příklad 8:Vymazání řádků obsahujících řetězce

Předpokládejme, že chceme odstranit řádek ze souboru /tmp/passwd, který obsahuje slovo „hry“.

# sed '/games/d' /tmp/passwd

Příklad 9:Hledat a nahradit řetězce v souboru

Předpokládejme, že chcete nahradit „root“ za „Admin“, příklad je uveden níže:

# sed 's/root/Admin/' /tmp/passwd

Je velmi důležité poznamenat, že sed nahradí pouze první výskyt na řádku. Pokud se řetězec „kořen“ vyskytuje na řádku více než jednou, bude nahrazena pouze první shoda. Chcete-li nahradit každý řetězec v souboru novým, nikoli pouze prvním výskytem, ​​chcete-li provést substituci globálně, přidejte na konec příkazu písmeno „g“, jak je znázorněno níže:

# sed 's/root/Admin/g' /tmp/passwd

Příklad 10:Vícenásobná substituce pomocí volby -e

Předpokládejme, že chceme nahradit řetězec „root“ řetězcem „Admin“ a řetězec „bash“ řetězcem „sh“. Příklad je uveden níže:

# cat /tmp/passwd | sed -e 's/root/Admin/g' -e 's/bash/sh/g'


Linux
  1. Příkaz mv v Linuxu:7 základních příkladů

  2. Příklady příkazů gzip v Linuxu

  3. více příkladů příkazů v Linuxu

  1. Příklady příkazů Linux tail

  2. Úvod do sed (Editor streamu) :Užitečné příklady příkazů sed

  3. Příklady příkazů sed v Linuxu

  1. Příkaz Linux sed:Jak používat Stream Editor

  2. V příkladech příkazů v Linuxu

  3. soubor Příklady příkazů v Linuxu