GNU/Linux >> Znalost Linux >  >> Linux

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

Úvod

SED je editor textových proudů používaný na systémech Unix k rychlé a efektivní úpravě souborů. Nástroj prohledává, nahrazuje, přidává a odstraňuje řádky v textovém souboru bez otevření souboru v textovém editoru.

Naučte se používat sed příkaz a jeho možnosti prostřednictvím snadno pochopitelných příkladů.

Linux sed Syntaxe

Hlavní syntaxe pro použití Linuxu sed příkaz je:

sed OPTIONS... [SCRIPT] [INPUTFILE...]

Sed Linux Options

Můžete spustit sed s následujícími možnostmi příkazového řádku:

-b , --binary Otevřete vstupní soubory v binárním režimu, abyste zvážili, že řádky končí na řádku.
--debug Přepněte do režimu ladění, abyste mohli tisknout vstup v kanonické podobě a komentovat provádění programu.
--follow-symlinks Upravte konečný cíl, pokud je zadaný soubor symbolickým odkazem. Funguje pouze v kombinaci s --i možnost.
--help Zobrazte informace o použití.
--i , --in-place [=SUFFIX] Proveďte úpravy na místě přepsáním původního souboru.
--posix Zakažte všechna rozšíření POSIX sed pro zjednodušení psaní přenosných skriptů.
--version Zobrazit verzi sed běžící v systému.
-E , -r , --regexp-extended Používejte rozšířené regulární výrazy.
-e <em>script</em> , --expression=<em>script</em> Přidejte zadaný skript, který se má spustit s příkazy.
-f <em>script-file</em> Přidejte obsah zadaného souboru skriptu, který se má spustit s příkazy.
-l <em>N</em> , --line-length=<em>N</em> Definujte požadovanou délku zalamování řádku pro l příkaz (výchozí hodnota je 70).
-n , --quiet , --silent Zakázat tisk výstupu.
-s , --separate Zobrazujte zadané soubory jako samostatné, nikoli jako jeden souvislý dlouhý stream.
--sandbox Zakázat spouštění externích programů a pracovat pouze se vstupními soubory na příkazovém řádku.
-u , --unbuffered Minimalizujte vstupní a výstupní vyrovnávací paměť.
-z , --null-data , --zero-terminated Zobrazte vstup jako sadu řádků, kde každý končí nulou.

Příklady systému Linux

Níže uvádíme deset běžně používaných sed příkazy, příklady a syntaxe.

Pro tento tutoriál jsme vytvořili ukázkový soubor pod názvem foxinbox.tx t s následujícím obsahem:

Knox in box.
Fox in socks.

Knox on fox in socks in box.

Socks on Knox and Knox in box.
Fox in socks on box on Knox.

Všimněte si, že sed neovlivní zdrojový soubor, pokud nedostanete pokyn. Místo toho příkaz zobrazí změny provedené daným příkazem ve svém výstupu.

Chcete-li přepsat původní soubor, použijte --i možnost uložit změny. Takový postup se však nedoporučuje před testováním výstupu příkazu.

Případně uložit úpravy do jiného (nebo nového) souboru. Přesměrujte výstup přidáním > newfilename.txt na konci příkazu.

Nahradit řetězec pomocí příkazu sed

Linux sed příkaz se nejčastěji používá pro nahrazování textu. Vyhledá zadaný vzor v souboru a nahradí ho požadovaným řetězcem.

Chcete-li nahradit text pomocí sed , použijte náhradní příkaz s a oddělovače (ve většině případů lomítka - / ) pro oddělení textových polí.

Proto je syntaxe pro nahrazení textu:

sed 's/old_string/new_string/' filename.txt

Nahraďte old_string s textem, který chcete nahradit, a new_string s textem, na který jej chcete změnit.

Chcete-li například nahradit instance box se slovem bin , spustit:

sed 's/box/bin/' foxinbox.txt

Výstup zobrazuje text s nahrazenými slovy, jako na obrázku níže.

Nahradit všechny výskyty řetězce pomocí příkazu sed

Ve výchozím nastavení sed pouze nahradí první výskyt zadaného řetězce v každém řádku. Vyhledá první výskyt zadaného slova na řádku, nahradí jej a přejde na další řádek.

S více výskyty slova box ve stejném řádku příkaz nahradí pouze první.

Pokud máte více výskytů stejného slova na jednom řádku, přidejte g příznak k příkazu, abyste je změnili všechny.

Příkaz pro nahrazení každého výskytu daného řetězce v textu je:

sed 's/old_string/new_string/g' filename.txt

Chcete-li nahradit slovo box se slovem bin v souboru foxinbox.txt pokaždé zadejte:

sed 's/box/bin/g' foxinbox.txt

Výše uvedený výstup ukazuje, že příkaz nahradil všechny výskyty slova box .

Nahradit konkrétní výskyt v řádku pomocí příkazu sed

sed umožňuje vybrat, který výskyt zadaného řetězce chcete nahradit v každém řádku. Chcete-li to provést, přidejte číselný příznak, například 1 , 2 atd.:

sed 's/old_string/new_string/#' filename.txt

Chcete-li například nahradit druhý výskyt slova box v každém řádku textu slovo bin , použijte tento příkaz:

sed 's/box/bin/2' foxinbox.txt

Příkaz vynechal tři výskyty slova, protože byly první v řadě a nahradily pouze ten na konci.

Vytisknout pouze řádky s náhradním textem

Ve výchozím nastavení je sed příkaz vytiskne celý obsah souboru spolu s náhradním textem ve výstupu. Pokud máte hodně textu a chcete se zaměřit na řádky s aplikovanými změnami, přidejte do příkazu potřebné atributy.

Chcete-li vytisknout pouze řádky, které mají substituci za daných podmínek, použijte syntaxi:

sed -n 's/old_string/new_string/p' filename.txt

-n volba zakáže automatický tisk, zatímco náhradní příkaz p dává pokyn sed vytisknout řádky, kde dochází k záměně.

Můžete přidat p příkaz k jiným náhradním příkazům, jako v příkladu níže:

sed -n 's/box/bin/2p' foxinbox.txt

Příkaz nahradí druhý výskyt slova box v řádku a vytiskne řádek, kde došlo ke změně. Na obrázku níže vidíte pouze jeden řádek s použitou substitucí.

Nahradit řetězec pomocí příkazu sed a ignorovat velikost písmen

Ve výchozím nastavení je sed příkaz rozlišuje velká a malá písmena. Například následující obsah obsahuje slovo fox s velkými a malými počátečními písmeny:

Knox in box.
Fox in socks.

Knox on fox in socks in box.

Socks on Knox and Knox in box.
Fox in socks on box on Knox.

Chcete-li nahradit všechny výskyty slova liška , nespouštějte obvyklý příkaz:

sed 's/fox/cow/' foxinbox.txt

Výsledek příkazu změní pouze výskyt slova fox kde je to celé malé:

Chcete-li při nahrazování textu ignorovat velká a malá písmena, přidejte i dílčí příkaz na konci příkazu:

sed 's/old_string/new_string/i' filename.txt

Proto příkaz pro změnu velkých a malých písmen slova liška ve výše uvedeném textu je:

sed 's/fox/cow/i' foxinbox.txt

Výstup ukazuje, že příkaz změnil všechny tři instance zadaného řetězce.

Nahradit řetězec v určitém řádku pomocí příkazu sed

sed příkaz umožňuje nahradit řetězec v konkrétním řádku přidáním čísla řádku jako předpony do s dílčí příkaz:

sed '# s/old_string/new_string/' filename.txt

Chcete-li tuto funkci otestovat na ukázkovém souboru foxinbox.txt soubor, nahraďte slovo socks s sandals pouze ve čtvrtém řádku (4 ) textu pomocí příkazu:

sed '4 s/socks/sandals/' foxinbox.txt

Výstup ukazuje, že první výskyt slova socks ve druhém řádku zůstává stejné, zatímco stejné slovo bylo nahrazeno výrazem sandals ve čtvrtém řádku.

Nahradit řetězec pouze v určitém rozsahu řádků pomocí příkazu sed

Chcete-li nahradit více výskytů řetězce v rámci rozsahu řádků, ale nikoli celý text, zadejte rozsah, do kterého chcete sed nahradit. Syntaxe je:

sed '#,# s/old_string/new_string/' filename.txt

Nahraďte první # s počátečním číslem řádku a druhým # s posledním číslem řádku, který chcete zahrnout.

Chcete-li například nahradit poslední dva výskyty slova ponožky v souboru foxinbox.txt (umístěné ve čtvrtém a šestém řádku) se slovem sandals , spustíte:

sed '4,6 s/socks/sandals/' foxinbox.txt

Odstranit konkrétní řádek pomocí příkazu sed

Chcete-li odstranit řádek ze souboru s sed použijte příkaz d dílčí příkaz a syntaxi:

sed '#d' filename.txt

Zadejte číslo řádku, který chcete odstranit místo hash (# ) a spusťte příkaz.

Chcete-li například odstranit druhý řádek ze souboru foxinbox.txt soubor, zadejte:

sed '2d' foxinbox.txt

Odstranění čar v určitém rozsahu čar pomocí příkazu sed

Chcete-li odstranit více řádků v rozsahu řádků pomocí sed postupujte podle syntaxe:

sed '#,#d' filename.txt

Nahraďte hash symboly začátkem a koncem rozsahu řádku. Například:

sed '2,4d' foxinbox.txt

Výše uvedený příkaz odstraní ze souboru řádky 2, 3 a 4.

Odstranit od konkrétního k poslednímu řádku pomocí příkazu sed

Chcete-li odstranit řádky od určitého čísla řádku po poslední řádek, použijte příkaz:

sed '#,$d' filename.txt

To znamená, že chcete odstranit vše od řádku 3 do konce foxinbox.txt , spusťte tento příkaz:

sed '3,$d' foxinbox.txt

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

  2. Jak používat Linuxový příkaz grep

  3. Jak používat příkaz id v Linuxu

  1. Jak používat příkaz historie v Linuxu

  2. Jak používat příkaz historie Linuxu

  3. Jak používat příkaz „screen“ v Linuxu

  1. Jak používat příkaz md5sum v Linuxu

  2. Jak používat příkaz xargs pro Linux

  3. Jak používat Linuxový příkaz tee