logo

Sed Command v Linuxu/Unixu s příklady

Příkaz SED v UNIXu je zkratka pro stream editor a může provádět mnoho funkcí na souboru, jako je vyhledávání, hledání a nahrazování, vkládání nebo mazání. Ačkoli nejběžnější použití příkazu SED v UNIXu je pro nahrazení nebo pro vyhledání a nahrazení. Pomocí SED můžete upravovat soubory i bez jejich otevírání, což je mnohem rychlejší způsob, jak najít a nahradit něco v souboru, než nejprve otevřít tento soubor v editoru VI a poté jej změnit.

  • SED je výkonný editor textových proudů. Umí vkládat, mazat, hledat a nahrazovat (substituce).
  • Příkaz SED v unixu podporuje regulární výraz, který mu umožňuje provádět komplexní porovnávání vzorů.

Syntax:

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

Příklad:
Jako vstup považujte níže uvedený textový soubor.



algoritmus pro rsa
 $cat>geekfile.txt>
 unix is great os. unix is opensource. unix is free os. learn operating system. unix linux which one you choose. unix is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.>

Ukázkové příkazy

    Nahrazení nebo nahrazení řetězce : Příkaz Sed se většinou používá k nahrazení textu v souboru. Níže uvedený jednoduchý příkaz sed nahradí v souboru slovo unix slovem linux.
     $sed 's/unix/linux/' geekfile.txt>

    Výstup :

     linux is great os. unix is opensource. unix is free os. learn operating system. linux linux which one you choose. linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.>

    Zde s specifikuje substituční operaci. / jsou oddělovače. Unix je vyhledávací vzor a linux je náhradní řetězec.

    Ve výchozím nastavení příkaz sed nahradí první výskyt vzoru v každém řádku a nenahradí druhý, třetí… výskyt v řádku. Nahrazení n-tého výskytu vzoru v řádku: Pomocí příznaků /1, /2 atd. nahraďte první, druhý výskyt vzoru v řádku. Níže uvedený příkaz nahradí druhý výskyt slova unix slovem linux v řádku.

     $sed 's/unix/linux/2' geekfile.txt>

    Výstup:

     unix is great os. linux is opensource. unix is free os. learn operating system. unix linux which one you choose. unix is easy to learn.linux is a multiuser os.Learn unix .unix is a powerful.>
    Nahrazení všech výskytů vzoru v řádku: Náhradní příznak /g (globální nahrazení) určuje příkaz sed, který nahradí všechny výskyty řetězce v řádku.
     $sed 's/unix/linux/g' geekfile.txt>

    Výstup :

     linux is great os. linux is opensource. linux is free os. learn operating system. linux linux which one you choose. linux is easy to learn.linux is a multiuser os.Learn linux .linux is a powerful.>
    Nahrazení od n-tého výskytu na všechny výskyty v řádku : Použijte kombinaci /1, /2 atd. a /g k nahrazení všech vzorků z n-tého výskytu vzoru v řádku. Následující příkaz sed nahradí třetí, čtvrté, páté… unixové slovo linuxovým slovem na řádku.
     $sed 's/unix/linux/3g' geekfile.txt>

    Výstup:

     unix is great os. unix is opensource. linux is free os. learn operating system. unix linux which one you choose. unix is easy to learn.unix is a multiuser os.Learn linux .linux is a powerful.>
    Závorka prvního znaku každého slova : Tento příklad sed vytiskne první znak každého slova v závorce.
     $ echo 'Welcome To The Geek Stuff' | sed 's/([A-Z])/(1)/g'>

    Výstup:

     (W)elcome (T)o (T)he (G)eek (S)tuff>
    Nahrazení řetězce na konkrétním čísle řádku : Příkaz sed můžete omezit tak, aby nahradil řetězec na konkrétním čísle řádku. Příkladem je
     $sed '3 s/unix/linux/' geekfile.txt>

    Výstup:

     unix is great os. unix is opensource. unix is free os. learn operating system. linux linux which one you choose. unix is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.>

    Výše uvedený příkaz sed nahradí řetězec pouze na třetím řádku. Duplikování nahrazeného řádku s příznakem /p : Příznak tisku /p vytiskne nahrazený řádek na terminálu dvakrát. Pokud řádek nemá vyhledávací vzor a není nahrazen, pak /p vytiskne tento řádek pouze jednou.

    spojový seznam
     $sed 's/unix/linux/p' geekfile.txt>

    Výstup:

     linux is great os. unix is opensource. unix is free os. linux is great os. unix is opensource. unix is free os. learn operating system. linux linux which one you choose. linux linux which one you choose. linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful. linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.>
    Tisk pouze nahrazených řádků: Použijte volbu -n spolu s parametrem tisku /p k zobrazení pouze nahrazených řádků. Zde volba -n potlačí duplicitní řádky generované parametrem /p a vytiskne nahrazené řádky pouze jednou.
     $sed -n 's/unix/linux/p' geekfile.txt>

    Výstup:

     linux is great os. unix is opensource. unix is free os. linux linux which one you choose. linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.>

    Pokud použijete -n samostatně bez /p, pak sed nic nevypíše. Nahrazení řetězce v rozsahu řádků: Můžete zadat rozsah čísel řádků příkazu sed pro nahrazení řetězce.

     $sed '1,3 s/unix/linux/' geekfile.txt>

    Výstup:

     linux is great os. unix is opensource. unix is free os. learn operating system. linux linux which one you choose. unix is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.>

    Zde příkaz sed nahradí řádky s rozsahem od 1 do 3. Dalším příkladem je

    1nf 2nf 3nf
     $sed '2,$ s/unix/linux/' geekfile.txt>

    Výstup:

     unix is great os. unix is opensource. unix is free os. learn operating system. linux linux which one you choose. linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful>

    Zde $ označuje poslední řádek v souboru. Příkaz sed tedy nahradí text z druhého řádku na poslední řádek v souboru. Odstranění řádků z určitého souboru: Příkaz SED lze také použít pro odstranění řádků z konkrétního souboru. Příkaz SED se používá k provedení operace mazání bez otevření souboru
    Příklady:
    1. Chcete-li smazat konkrétní řádek, řekněte v tomto příkladu n

     Syntax: $ sed 'nd' filename.txt Example: $ sed '5d' filename.txt>

    2. Chcete-li odstranit poslední řádek

     Syntax: $ sed '$d' filename.txt>

    3. Chcete-li vymazat řádek z rozsahu x až y

     Syntax: $ sed 'x,yd' filename.txt Example: $ sed '3,6d' filename.txt>

    4. Chcete-li odstranit od n-tého do posledního řádku

     Syntax: $ sed 'nth,$d' filename.txt Example: $ sed '12,$d' filename.txt>

    5. Chcete-li odstranit čáru odpovídající vzoru

     Syntax: $ sed '/pattern/d' filename.txt Example: $ sed '/abc/d' filename.txt>


Příkaz SED v Linuxu | Sada 2