GNU/Linux >> Znalost Linux >  >> Linux

50 praktických příkladů příkazu SED v Linuxu

Bez ohledu na to, zda jste správce systému nebo pouhý nadšenec, je pravděpodobné, že budete často potřebovat pracovat s textovými dokumenty. Linux, stejně jako ostatní Uniices, poskytuje koncovým uživatelům některé z nejlepších nástrojů pro manipulaci s textem. Nástroj příkazového řádku sed je jedním z takových nástrojů, díky kterému je zpracování textu mnohem pohodlnější a produktivnější. Pokud jste ostřílený uživatel, měli byste již vědět o sed. Začátečníci však často cítí, že učení sed vyžaduje extra tvrdou práci, a proto se zdržují používání tohoto fascinujícího nástroje. To je důvod, proč jsme si dovolili vytvořit tuto příručku a pomoci jim naučit se základy sed tak snadno, jak je to jen možné.

Užitečné příkazy SED pro začínající uživatele

Sed je jedním ze tří široce používaných filtrovacích nástrojů dostupných v Unixu, ostatní jsou „grep a awk“. Příkazy grep a awk pro Linux pro začátečníky jsme již probrali. Tato příručka si klade za cíl zabalit nástroj sed pro začínající uživatele a učinit je zběhlými ve zpracování textu pomocí Linuxu a dalších Unices.

Jak SED funguje:Základní porozumění

Než se pustíte přímo do příkladů, měli byste stručně porozumět tomu, jak sed obecně funguje. Sed je editor streamů, postavený na nástroji ed. Umožňuje nám provádět úpravy změn proudu textových dat. Ačkoli můžeme pro úpravy použít řadu textových editorů Linux, sed umožňuje něco pohodlnějšího.

Pomocí sed můžete transformovat text nebo filtrovat důležitá data za běhu. Dodržuje základní filozofii Unixu tím, že tento specifický úkol plní velmi dobře. Kromě toho se sed velmi dobře hraje se standardními terminálovými nástroji a příkazy Linuxu. Proto je pro mnoho úkolů vhodnější než tradiční textové editory.

Ve svém jádru sed vezme nějaký vstup, provede nějaké manipulace a vyplivne výstup. Nezmění vstup, ale jednoduše zobrazí výsledek ve standardním výstupu. Tyto změny můžeme snadno provést natrvalo buď přesměrováním I/O nebo úpravou původního souboru. Základní syntaxe příkazu sed je uvedena níže.

sed [MOŽNOSTI] VLOŽENÉ jméno souboru 'seznam ed příkazů'

První řádek je syntaxe zobrazená v manuálu sed. To druhé je srozumitelnější. Nedělejte si starosti, pokud právě teď neznáte příkazy ed. Naučíte se je v této příručce.

1. Nahrazení textového vstupu

--

Náhradní příkaz je pro mnoho uživatelů nejrozšířenější funkcí sed. Umožňuje nám nahradit část textu jinými daty. Tento příkaz velmi často využijete pro zpracování textových dat. Funguje to následovně.

$ echo 'Ahoj světe!' | sed 's/world/vesmír/'

Tento příkaz vypíše řetězec ‚Ahoj vesmíre!‘. Má čtyři základní části. „s“ příkaz označuje operaci substituce, /../../ jsou oddělovače, první část v oddělovačích je vzor, ​​který je třeba změnit, a poslední část je nahrazující řetězec.

2. Nahrazení textového vstupu ze souborů

Nejprve vytvořte soubor pomocí následujícího.

$ echo 'strawberry Fields forever...'>> input-file$ cat input-file

Řekněme, že chceme nahradit jahodu borůvkou. Můžeme tak učinit pomocí následujícího jednoduchého příkazu. Všimněte si podobnosti mezi sed částí tohoto příkazu a výše uvedenou.

$ sed vstupní soubor 's/jahoda/borůvka/'

Jednoduše jsme přidali název souboru za část sed. Můžete také nejprve odeslat obsah souboru a poté použít sed k úpravě výstupního proudu, jak je znázorněno níže.

$ cat input-file | sed 's/jahoda/borůvka/'

3. Ukládání změn do souborů

Jak jsme již zmínili, sed vůbec nemění vstupní data. Jednoduše zobrazuje transformovaná data na standardní výstup, kterým je ve výchozím nastavení linuxový terminál. Můžete to ověřit spuštěním následujícího příkazu.

$ cat input-file

Tím se zobrazí původní obsah souboru. Řekněme však, že chcete, aby byly změny trvalé. Můžete to udělat několika způsoby. Standardní metodou je přesměrování výstupu sed do jiného souboru. Další příkaz uloží výstup předchozího příkazu sed do souboru s názvem output-file.

$ sed 's/strawberry/borůvka/' vstupní-soubor>> výstupní-soubor

Můžete to ověřit pomocí následujícího příkazu.

$ cat output-file

4. Uložení změn do původního souboru

Co kdybyste chtěli uložit výstup sed zpět do původního souboru? To lze provést pomocí -i nebo –na místě možnost tohoto nástroje. Níže uvedené příkazy to demonstrují na vhodných příkladech.

$ sed -i vstupní-soubor 's/jahoda/borůvka'$ sed --in-place vstupní-soubor 's/jahoda/borůvka/'

Oba tyto výše uvedené příkazy jsou ekvivalentní a zapisují změny provedené sed zpět do původního souboru. Pokud však uvažujete o přesměrování výstupu zpět do původního souboru, nebude to fungovat podle očekávání.

$ sed 's/strawberry/borůvka/' vstupní-soubor> vstupní-soubor

Tento příkaz nebude fungovat a výsledkem je prázdný vstupní soubor. Je to proto, že shell provede přesměrování před spuštěním samotného příkazu.

5. Escaping Delimiters

Mnoho konvenčních příkladů sed používá jako oddělovače znak „/“. Co když však chcete nahradit řetězec obsahující tento znak? Níže uvedený příklad ukazuje, jak nahradit cestu k souboru pomocí sed. Oddělovače „/“ budeme muset escapovat pomocí znaku zpětného lomítka.

$ echo '/usr/local/bin/dummy'>> input-file$ sed 's/\/usr\/local\/bin\/dummy/\/usr\/bin\/dummy/' vstup -file> výstupní-soubor

Dalším snadným způsobem, jak uniknout oddělovačům, je použít jiný metaznak. Například bychom mohli použít '_' místo '/' jako oddělovače příkazu substituce. Je to naprosto platné, protože sed nenařizuje žádné konkrétní oddělovače. Znak „/“ se používá podle konvence, nikoli jako požadavek.

$ sed 's_/usr/local/bin/dummy_/usr/bin/dummy/_' vstupní soubor

6. Nahrazení každé instance řetězce

Jednou ze zajímavých vlastností příkazu substituce je, že ve výchozím nastavení nahradí pouze jednu instanci řetězce na každém řádku.

$ cat <> vstupní-soubor jedna dva jedna třidva čtyři dvatři jedna čtyřiEOF

Tento příkaz nahradí obsah vstupního souboru některými náhodnými čísly ve formátu řetězce. Nyní se podívejte na níže uvedený příkaz.

$ sed 's/one/ONE/' vstupní soubor

Jak byste měli vidět, tento příkaz pouze nahrazuje první výskyt „jedna“ na prvním řádku. Chcete-li nahradit všechny výskyty slova pomocí sed, musíte použít globální substituci. Jednoduše přidejte ‘g‘ za konečným oddělovačem‘s ‘.

$ sed 's/one/ONE/g' vstupní soubor

To nahradí všechny výskyty slova „jeden“ ve vstupním proudu.

7. Použití shodného řetězce

Někdy mohou uživatelé chtít přidat určité věci, jako jsou závorky nebo uvozovky kolem určitého řetězce. To je snadné, pokud přesně víte, co hledáte. Co když však přesně nevíme, co najdeme? Obslužný program sed poskytuje příjemnou malou funkci pro párování takového řetězce.

$ echo 'jedna dva tři 123' | sed 's/123/(123)/'

Zde přidáváme závorky kolem 123 pomocí příkazu sed substituce. Můžeme to však udělat pro jakýkoli řetězec v našem vstupním proudu pomocí speciálního metaznaku & , jak ukazuje následující příklad.

$ echo 'jedna dva tři 123' | sed 's/[a-z][a-z]*/(&)/g'

Tento příkaz přidá závorky kolem všech slov s malými písmeny v našem vstupu. Pokud vynecháte ‘g‘ sed to udělá pouze pro první slovo, ne pro všechna.

8. Používání rozšířených regulárních výrazů

Ve výše uvedeném příkazu jsme spojili všechna malá slova pomocí regulárního výrazu [a-z][a-z]*. Odpovídá jednomu nebo více malým písmenům. Dalším způsobem, jak je porovnat, je použít metaznak ‘+‘ . Toto je příklad rozšířených regulárních výrazů. Proto je sed ve výchozím nastavení nepodporuje.

$ echo 'jedna dva tři 123' | sed 's/[a-z]+/(&)/g'

Tento příkaz nefunguje podle očekávání, protože sed nepodporuje ‘+‘ metaznak z krabice. Musíte použít možnosti -E nebo -r k povolení rozšířených regulárních výrazů v sed.

$ echo 'jedna dva tři 123' | sed -E 's/[a-z]+/(&)/g'$ echo 'jedna dva tři 123' | sed -r 's/[a-z]+/(&)/g'

9. Provádění vícenásobných záměna

Můžeme použít více než jeden příkaz sed najednou, když je oddělíme ‘;‘ (středník). To je velmi užitečné, protože umožňuje uživateli vytvářet robustnější kombinace příkazů a omezovat další potíže za chodu. Následující příkaz nám ukazuje, jak pomocí této metody nahradit tři řetězce najednou.

$ echo 'jedna dva tři' | sed 's/one/1/; s/dva/2/; s/tři/3/'

Tento jednoduchý příklad jsme použili k ilustraci toho, jak provádět vícenásobné substituce nebo jakékoli jiné operace sed.

10. Necitlivě nahrazovat malá a velká písmena

Obslužný program sed nám umožňuje nahrazovat řetězce bez ohledu na velikost písmen. Nejprve se podívejme, jak sed provádí následující jednoduchou operaci výměny.

$ echo 'one ONE One' | sed 's/one/1/g' # nahrazuje jeden

Příkaz náhrady se může shodovat pouze s jednou instancí „jedna“ a tím ji nahradit. Řekněme však, že chceme, aby odpovídala všem výskytům „jedničky“, bez ohledu na velikost písmen. Můžeme to vyřešit použitím příznaku „i“ operace substituce sed.

$ echo 'one ONE One' | sed 's/one/1/gi' # nahradí všechny jedničky

11. Tisk konkrétních řádků

Konkrétní řádek ze vstupu můžeme zobrazit pomocí ‘p‘ příkaz. Pojďme přidat další text do našeho vstupního souboru a předvést tento příklad.

$ echo 'Přidání dalšího textu do vstupního souboru pro lepší ukázku'>> input-file

Nyní spusťte následující příkaz, abyste viděli, jak vytisknout konkrétní řádek pomocí „p“.

$ sed '3p; 6p' vstupní soubor

Výstup by měl obsahovat řádek číslo tři a šest dvakrát. Tohle jsme nečekali, že? To se děje proto, že ve výchozím nastavení sed vypisuje všechny řádky vstupního toku, stejně jako řádky, které jsou konkrétně dotázány. Abychom vytiskli pouze konkrétní řádky, musíme potlačit všechny ostatní výstupy.

$ sed -n '3p; 6p' input-file$ sed --quiet '3p; 6p' input-file$ sed --silent '3p; 6p' vstupní soubor

Všechny tyto příkazy sed jsou ekvivalentní a vytisknou pouze třetí a šestý řádek z našeho vstupního souboru. Nechtěný výstup tedy můžete potlačit pomocí jednoho z -n , – tichý nebo –tiché možnosti.

12. Rozsah tisku řádků

Níže uvedený příkaz vytiskne řadu řádků z našeho vstupního souboru. Symbol ‘,’ lze použít pro specifikaci rozsahu vstupu pro sed.

$ sed -n '2,4p' input-file$ sed --quiet '2,4p' input-file$ sed --silent '2,4p' input-file

všechny tyto tři příkazy jsou také ekvivalentní. Vytisknou řádky dva až čtyři našeho vstupního souboru.

13. Tisk nesouvislých řádků

Předpokládejme, že jste chtěli vytisknout konkrétní řádky z textového vstupu pomocí jediného příkazu. Takové operace můžete zvládnout dvěma způsoby. Prvním z nich je spojení více tiskových operací pomocí ‘;‘ oddělovač.

$ sed -n '1,2p; 5,6p' vstupní soubor

Tento příkaz vytiskne první dva řádky vstupního souboru následované posledními dvěma řádky. Můžete to provést také pomocí -e možnost sed. Všimněte si rozdílů v syntaxi.

$ sed -n -e '1,2p' -e '5,6p' vstupní-soubor

14. Tisk každého N-tého řádku

Řekněme, že jsme chtěli zobrazit každý druhý řádek z našeho vstupního souboru. Nástroj sed to velmi usnadňuje tím, že poskytuje vlnovku ‘~‘ operátor. Podívejte se rychle na následující příkaz, abyste viděli, jak to funguje.

$ sed -n '1~2p' vstupní soubor

Tento příkaz funguje tak, že vytiskne první řádek následovaný každým druhým řádkem vstupu. Následující příkaz vytiskne druhý řádek následovaný každým třetím řádkem z výstupu jednoduchého příkazu ip.

$ ip -4 a | sed -n '2~3p'

15. Nahrazování textu v rámci rozsahu

Můžeme také nahradit nějaký text pouze v určeném rozsahu stejným způsobem, jakým jsme jej vytiskli. Níže uvedený příkaz ukazuje, jak nahradit „jedničky“ jedničkami v prvních třech řádcích našeho vstupního souboru pomocí sed.

$ sed '1,3 s/one/1/gi' vstupní soubor

Tento příkaz ponechá všechny ostatní „neovlivněné“. Přidejte do tohoto souboru několik řádků obsahujících jeden a zkuste to sami zkontrolovat.

16. Odstranění řádků ze vstupu

Příkaz ed ‘d‘ nám umožňuje odstranit konkrétní řádky nebo rozsah řádků z textového proudu nebo ze vstupních souborů. Následující příkaz ukazuje, jak odstranit první řádek z výstupu sed.

$ sed '1d' vstupní soubor

Protože sed zapisuje pouze na standardní výstup, toto odstranění se neprojeví na původním souboru. Stejný příkaz lze použít k odstranění prvního řádku z víceřádkového textového proudu.

$ ps | sed '1d'

Takže jednoduše pomocí 'd' příkaz za adresou řádku, můžeme potlačit vstup pro sed.

17. Odstranění rozsahu řádků ze vstupu

Je také velmi snadné odstranit řadu řádků pomocí operátoru ‚,‘ vedle ‚d‘ volba. Další příkaz sed potlačí první tři řádky z našeho vstupního souboru.

$ sed '1,3d' vstupní soubor

Pomocí jednoho z následujících příkazů můžeme také odstranit řádky, které nejdou za sebou.

$ sed '1d; 3d; 5d' vstupní soubor

Tento příkaz zobrazí druhý, čtvrtý a poslední řádek z našeho vstupního souboru. Následující příkaz vynechává některé libovolné řádky z výstupu jednoduchého příkazu ip pro Linux.

$ ip -4 a | sed '1d; 3d; 4d; 6d'

18. Odstranění posledního řádku

Nástroj sed má jednoduchý mechanismus, který nám umožňuje odstranit poslední řádek z textového proudu nebo vstupního souboru. Je to „$“ a lze jej kromě mazání použít i pro jiné typy operací. Následující příkaz odstraní poslední řádek ze vstupního souboru.

$ sed '$d' vstupní soubor

To je velmi užitečné, protože často můžeme znát počet řádků předem. To funguje podobným způsobem pro vstupy do potrubí.

$ seq 3 | sed '$d'

19. Smazání všech řádků kromě konkrétních

Dalším užitečným příkladem odstranění sed je odstranění všech řádků kromě těch, které jsou uvedeny v příkazu. To je užitečné pro odfiltrování základních informací z textových proudů nebo výstupu jiných příkazů linuxového terminálu.

$ zdarma | sed '2!d'

Tento příkaz vypíše pouze využití paměti, které je náhodou na druhém řádku. Totéž můžete udělat se vstupními soubory, jak je ukázáno níže.

$ sed '1,3!d' vstupní soubor

Tento příkaz odstraní ze vstupního souboru každý řádek kromě prvních tří.

20. Přidávání prázdných řádků

Někdy může být vstupní proud příliš koncentrovaný. V takových případech můžete použít nástroj sed k přidání prázdných řádků mezi vstup. Následující příklad přidá prázdný řádek mezi každý řádek výstupu příkazu ps.

$ ps aux | sed 'G'

Značka G příkaz přidá tento prázdný řádek. Můžete přidat více prázdných řádků použitím více než jednoho „G“ příkaz pro sed.

$ sed 'G; G' input-file

Následující příkaz ukazuje, jak přidat prázdný řádek za konkrétní číslo řádku. Za třetí řádek našeho vstupního souboru přidá prázdný řádek.

$ sed '3G' vstupní soubor

21. Nahrazení textu na konkrétních řádcích

Nástroj sed umožňuje uživatelům nahradit nějaký text na konkrétním řádku. To je užitečné v mnoha různých scénářích. Řekněme, že chceme nahradit slovo ‚jeden‘ na třetím řádku našeho vstupního souboru. K tomu můžeme použít následující příkaz.

$ sed '3 s/one/1/' vstupní soubor

„3“ před začátkem ‘s‘ příkaz určuje, že chceme nahradit pouze slovo, které se nachází na třetím řádku.

22. Nahrazení N-tého slova řetězce

Příkazem sed můžeme také nahradit n-tý výskyt vzoru pro daný řetězec. Následující příklad to ilustruje pomocí jednoho jednořádkového příkladu v bash.

$ echo 'jedna jedna jedna jedna jedna jedna' | sed 's/one/1/3'

Tento příkaz nahradí třetí ‚jedničku‘ číslem 1. Totéž funguje pro vstupní soubory. Níže uvedený příkaz nahradí poslední „dva“ z druhého řádku vstupního souboru.

$ cat input-file | sed '2 s/dva/2/2'

Nejprve vybereme druhý řádek a poté určíme, který výskyt vzoru se má změnit.

23. Přidání nových řádků

Do vstupního proudu můžete snadno přidat nové řádky pomocí příkazu ‘a‘ . Podívejte se na jednoduchý příklad níže, abyste viděli, jak to funguje.

$ sed 'nový řádek ve vstupu' vstupní soubor

Výše uvedený příkaz připojí řetězec „nový řádek na vstupu“ za každý řádek původního vstupního souboru. To však nemusí být to, co jste zamýšleli. Za konkrétní řádek můžete přidat nové řádky pomocí následující syntaxe.

$ sed '3 nový řádek ve vstupním' vstupním souboru

24. Vkládání nových řádků

Můžeme také vkládat řádky místo jejich připojování. Níže uvedený příkaz vloží nový řádek před každý řádek vstupu.

$ seq 5 | sed 'i 888'

„i“ způsobí vložení řetězce 888 před každý řádek výstupu seq. Chcete-li vložit řádek před konkrétní vstupní řádek, použijte následující syntaxi.

$ seq 5 | sed '3 i 333'

Tento příkaz přidá číslo 333 před řádek, který ve skutečnosti obsahuje tři. Toto jsou jednoduché příklady vkládání řádků. Řetězce můžete snadno přidávat srovnáváním čar pomocí vzorů.

25. Změna vstupních řádků

Můžeme také změnit řádky vstupního proudu přímo pomocí ‘c‘ příkaz obslužného programu sed. To je užitečné, když přesně víte, který řádek nahradit, a nechcete, aby se řádek shodoval pomocí regulárních výrazů. Níže uvedený příklad změní třetí řádek výstupu příkazu seq.

$ seq 5 | sed '3 c 123'

Nahradí obsah třetího řádku, což je 3, číslem 123. Následující příklad nám ukazuje, jak změnit poslední řádek našeho vstupního souboru pomocí ‚c‘ .

$ sed '$ c ZMĚNĚNÝ STRING' vstupní soubor

Můžeme také použít regulární výraz pro výběr čísla řádku, který se má změnit. Následující příklad to ilustruje.

$ sed '/demo*/ c Vstupní soubor ZMĚNĚNÉHO TEXTU

26. Vytváření záložních souborů pro vstup

Pokud chcete transformovat nějaký text a uložit změny zpět do původního souboru, důrazně doporučujeme vytvořit záložní soubory, než budete pokračovat. Následující příkaz provede některé operace sed s naším vstupním souborem a uloží jej jako originál. Navíc preventivně vytvoří zálohu nazvanou input-file.old.

$ sed -i.old 's/one/1/g; s/dva/2/g; s/tři/3/g' vstupní-soubor

-i volba zapíše změny provedené sed do původního souboru. Část s příponou .old je zodpovědná za vytvoření dokumentu input-file.old.

27. Tisk čar na základě vzorů

Řekněme, že chceme vytisknout všechny řádky ze vstupu na základě určitého vzoru. To je poměrně snadné, když zkombinujeme příkazy sed ‚p‘ pomocí -n volba. Následující příklad to ilustruje pomocí vstupního souboru.

$ sed -n '/^for/ p' vstupní-soubor

Tento příkaz hledá vzor „pro“ na začátku každého řádku a tiskne pouze řádky, které jím začínají. „^“ znak je speciální znak regulárního výrazu známý jako kotva. Určuje, že vzor by měl být umístěn na začátku řádku.

28. Použití SED jako alternativy k GREPu

Příkaz grep v Linuxu hledá konkrétní vzor v souboru a pokud je nalezen, zobrazí řádek. Toto chování můžeme emulovat pomocí nástroje sed. Následující příkaz to ilustruje na jednoduchém příkladu.

$ sed -n 's/strawberry/&/p' /usr/share/dict/american-english

Tento příkaz vyhledá slovo jahoda v americké angličtině soubor slovníku. Funguje tak, že vyhledá vzor jahoda a poté použije odpovídající řetězec vedle ‚p‘ příkaz k tisku. -n flag potlačí všechny ostatní řádky ve výstupu. Tento příkaz můžeme zjednodušit pomocí následující syntaxe.

$ sed -n '/strawberry/p' /usr/share/dict/american-english

29. Přidání textu ze souborů

„r“ příkaz obslužného programu sed nám umožňuje připojit text přečtený ze souboru do vstupního proudu. Následující příkaz vygeneruje vstupní proud pro sed pomocí příkazu seq a připojí k tomuto proudu texty obsažené ve vstupním souboru.

$ seq 5 | sed 'r input-file'

Tento příkaz přidá obsah vstupního souboru po každé následné vstupní sekvenci vytvořené seq. Pomocí následujícího příkazu přidejte obsah za čísla vygenerovaná seq.

$ seq 5 | sed '$ r input-file'

Pro přidání obsahu za n-tý řádek vstupu můžete použít následující příkaz.

$ seq 5 | sed '3 r input-file'

30. Zápis úprav do souborů

Předpokládejme, že máme textový soubor, který obsahuje seznam webových adres. Řekněme, že některé začínají na www, některé https a jiné http. Můžeme změnit všechny adresy začínající na www na https a uložit pouze ty, které byly upraveny, do zcela nového souboru.

$ sed 's/www/https/w webové stránky upravených-webových stránek

Nyní, když si prohlédnete obsah souboru updated-websites, najdete pouze adresy, které byly změněny sed. Názevsouboru w ‘ volba způsobí, že sed zapíše úpravy do zadaného souboru. Je to užitečné, když pracujete s velkými soubory a chcete upravená data uložit samostatně.

31. Pomocí SED Program Files

Někdy může být nutné provést řadu operací sed na dané vstupní sadě. V takových případech je lepší napsat programový soubor obsahující všechny různé sed skripty. Tento programový soubor pak můžete jednoduše vyvolat pomocí -f možnost obslužného programu sed.

$ cat <> sed-scripts/a/A/gs/e/E/gs/i/I/gs/o/O/gs/u/U/gEOF

Tento program sed změní všechny malé samohlásky na velká písmena. Můžete to spustit pomocí níže uvedené syntaxe.

$ sed -f vstupní-soubor sed-script$ sed --file=sed-script  

32. Použití víceřádkových příkazů SED

Pokud píšete velký sed program, který zahrnuje více řádků, budete je muset správně citovat. Syntaxe se mezi různými shelly Linuxu mírně liší. Naštěstí je to pro Bourne shell a jeho deriváty (bash) velmi jednoduché.

$ sed 's/a/A/g s/e/E/g s/i/I/g s/o/O/g s/u/U/g'  

V některých shellech, jako je C shell (csh), musíte chránit uvozovky pomocí znaku zpětného lomítka (\).

$ sed 's/a/A/g \s/e/E/g \s/i/I/g \s/o/O/g \s/u/U/g'  

33. Tisk čísel řádků

Pokud chcete vytisknout číslo řádku obsahující konkrétní řetězec, můžete jej vyhledat pomocí vzoru a velmi snadno vytisknout. K tomu budete muset použít ‘=’ příkaz obslužného programu sed.

$ sed -n '/ion*/ ='  

Tento příkaz vyhledá daný vzor ve vstupním souboru a vypíše jeho číslo řádku na standardní výstup. K řešení tohoto problému můžete také použít kombinaci grep a awk.

$ cat -n vstupní-soubor | grep 'ion*' | awk '{print $1}'

K vytištění celkového počtu řádků ve vašem vstupu můžete použít následující příkaz.

$ sed -n '$=' vstupní-soubor

34. Zabránění přepsání Symlinku

Sedák ‘i‘ nebo ‘–na místě ‘ příkaz často přepíše jakékoli systémové odkazy běžnými soubory. Toto je v mnoha případech nechtěná situace, a proto by uživatelé mohli chtít tomu zabránit. Naštěstí sed poskytuje jednoduchou možnost příkazového řádku pro zakázání přepisování symbolických odkazů.

$ echo 'apple'> fruit$ ln --symbolic fruit fruit-link$ sed --in-place --follow-symlinks 's/apple/banana/' fruit-link$ cat fruit

Můžete tedy zabránit přepsání symbolického odkazu pomocí –follow-symlinks možnost nástroje sed. Tímto způsobem můžete zachovat symbolické odkazy při zpracování textu.

35. Tisk všech uživatelských jmen z /etc/passwd

Soubor /etc/passwd obsahuje systémové informace pro všechny uživatelské účty v Linuxu. Můžeme získat seznam všech uživatelských jmen dostupných v tomto souboru pomocí jednoduchého jednořádkového programu sed. Podívejte se pozorně na níže uvedený příklad, abyste viděli, jak to funguje.

$ sed 's/\([^:]*\).*/\1/' /etc/passwd

Použili jsme vzor regulárního výrazu, abychom získali první pole z tohoto souboru, zatímco jsme zahodili všechny ostatní informace. Zde jsou uživatelská jména umístěna v /etc/passwd soubor.

36. Odstranění komentovaných řádků ze vstupu

Mnoho systémových nástrojů i aplikací třetích stran je dodáváno s konfiguračními soubory. Tyto soubory obvykle obsahují spoustu komentářů s podrobným popisem parametrů. Někdy však možná budete chtít zobrazit pouze možnosti konfigurace a ponechat původní komentáře na místě.

$ cat ~/.bashrc | sed -e 's/#.*//;/^$/d'

Tento příkaz odstraní komentované řádky z konfiguračního souboru bash. Komentáře jsou označeny pomocí předchozího znaku „#“. Takže jsme všechny takové řádky odstranili pomocí jednoduchého vzoru regulárních výrazů. Pokud jsou komentáře označeny pomocí jiného symbolu, nahraďte „#“ ve výše uvedeném vzoru tímto specifickým symbolem.

$ cat ~/.vimrc | sed -e 's/".*//;/^$/d'

Tím se odstraní komentáře z konfiguračního souboru vim, který začíná symbolem dvojité uvozovky (“).

37. Odstranění mezer ze vstupu

Mnoho textových dokumentů je vyplněno zbytečnými mezerami. Často jsou výsledkem špatného formátování a mohou zkazit celkové dokumenty. Naštěstí sed umožňuje uživatelům tyto nežádoucí mezery velmi snadno odstranit. Následující příkaz můžete použít k odstranění úvodních bílých znaků ze vstupního streamu.

$ sed 's/^[ \t]*//' whitespace.txt

Tento příkaz odstraní všechny úvodní mezery ze souboru whitespace.txt. Pokud chcete odstranit mezery na konci, použijte místo toho následující příkaz.

$ sed 's/[ \t]*$//' whitespace.txt

Můžete také použít příkaz sed k odstranění úvodních i koncových mezer současně. K provedení tohoto úkolu lze použít níže uvedený příkaz.

$ sed 's/^[ \t]*//;s/[ \t]*$//' whitespace.txt

38. Vytváření odsazení stránek pomocí SED

Pokud máte velký soubor s nulovým předním odsazením, možná pro něj budete chtít vytvořit odsazení stránek. Posuny stránek jsou jednoduše úvodní mezery, které nám pomáhají číst vstupní řádky bez námahy. Následující příkaz vytvoří odsazení 5 prázdných míst.

$ sed 's/^/ /' vstupní soubor

Jednoduše zvětšete nebo zmenšete rozestup, abyste určili jiné odsazení. Další příkaz zmenší posun stránky na 3 prázdné řádky.

$ sed 's/^/ /' vstupní soubor

39. Obrácení vstupních linek

Následující příkaz nám ukazuje, jak použít sed pro obrácení pořadí řádků ve vstupním souboru. Napodobuje chování linuxového tac příkaz.

$ sed '1!G;h;$!d' vstupní soubor

Tento příkaz obrátí řádky dokumentu vstupního řádku. Lze to provést i pomocí alternativní metody.

$ sed -n '1!G;h;$p' vstupní soubor

40. Obrácení vstupních znaků

Můžeme také použít utilitu sed k obrácení znaků na vstupních řádcích. Tím se obrátí pořadí každého po sobě jdoucího znaku ve vstupním proudu.

$ sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//' vstupní soubor 

Tento příkaz emuluje chování Linux rev příkaz. Můžete to ověřit spuštěním níže uvedeného příkazu po výše uvedeném.

$ rev input-file

41. Spojování párů vstupních linek

Následující jednoduchý příkaz sed spojí dva po sobě jdoucí řádky vstupního souboru jako jeden řádek. Je to užitečné, když máte velký text obsahující rozdělené řádky.

$ sed '$!N;s/\n/ /' input-file$ tail -15 /usr/share/dict/american-english | sed '$!N;s/\n/ /'

Je užitečný v řadě úloh manipulace s textem.

42. Přidání prázdných řádků na každý N-tý řádek vstupu

Na každý n-tý řádek vstupního souboru můžete velmi snadno přidat prázdný řádek pomocí sed. Další příkazy přidají prázdný řádek na každý třetí řádek vstupního souboru.

$ sed 'n;n;G;' vstupní-soubor

Použijte následující k přidání prázdného řádku na každý druhý řádek.

$ sed 'n;G;' vstupní-soubor

43. Tisk posledních N-tých řádků

Dříve jsme používali příkazy sed k tisku vstupních řádků na základě čísla řádku, rozsahů a vzoru. Můžeme také použít sed k emulaci chování povelů hlavy nebo ocasu. Následující příklad vytiskne poslední 3 řádky vstupního souboru.

$ sed -e :a -e '$q;N;4,$D;ba' vstupní-soubor

Je podobný níže uvedenému příkazu tail tail -3 input-file.

44. Tisk řádků obsahujících konkrétní počet znaků

Je velmi snadné tisknout řádky na základě počtu znaků. Následující jednoduchý příkaz vytiskne řádky, které obsahují 15 nebo více znaků.

$ sed -n '/^.\{15\}/p' input-file

Pomocí níže uvedeného příkazu vytisknete řádky, které mají méně než 20 znaků.

$ sed -n '/^.\{20\}/!p' vstupní-soubor

Můžeme to také udělat jednodušším způsobem pomocí následující metody.

$ sed '/^.\{20\}/d' vstupní-soubor

45. Odstranění duplicitních řádků

The following sed example shows us to emulate the behavior of the Linux uniq příkaz. It deletes any two consecutive duplicate lines from the input.

$ sed '$!N; /^\(.*\)\n\1$/!P; D' input-file

However, sed can not delete all duplicate lines if the input is not sorted. Although you can sort the text using the sort command and then connect the output to sed using a pipe, it will change the orientation of the lines.

46. Deleting All Blank Lines

If your text file contains a lot of unnecessary blank lines, you may delete them using the sed utility. The below command demonstrates this.

$ sed '/^$/d' input-file$ sed '/./!d' input-file

Both of these commands will delete any blank lines present in the specified file.

47. Deleting Last Lines of Paragraphs

You can delete the last line of all paragraphs using the following sed command. We will use a dummy filename for this example. Replace this with the name of an actual file that contains some paragraphs.

$ sed -n '/^$/{p;h;};/./{x;/./p;}' paragraphs.txt

48. Displaying the Help Page

The help page contains summarized information on all available options and usage of the sed program. You can invoke this by using the following syntax.

$ sed -h$ sed --help

You can use any of these two commands to find a nice, compact overview of the sed utility.

49. Displaying the Manual Page

The manual page provides an in-depth discussion of sed, its usage, and all available options. You should read this carefully to understand sed clearly.

$ man sed

50. Displaying Version Information

The –version option of sed allows us to view which version of sed is installed in our machine. It is useful when debugging errors and reporting bugs.

$ sed --version

The above command will display the version information of the sed utility in your system.

Konec myšlenek

The sed command is one of the most widely used text manipulation tools provided by Linux distributions. It is one of the three primary filtering utilities in Unix, alongside grep and awk. We have outlined 50 simple yet useful examples to help readers get started with this amazing tool. We highly recommend users to try these commands themselves to gain practical insights. Additionally, try tweaking the examples given in this guide and examine their effect. It will help you master sed quickly. Hopefully, you’ve learned the basics of sed clearly. Don’t forget to comment below if you’ve any questions.


Linux
  1. Praktické příklady příkazu Unzip v Linuxu

  2. 10 Praktické příklady příkazů Linux nm

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

  1. Příkaz Linux Sed:Použití a příklady

  2. cp Command v Linuxu:7 praktických příkladů

  3. Linux Shutdown Command:5 praktických příkladů

  1. Co je to Linux Watch Command + příklady

  2. 5 Praktické příklady příkazu „cd“ v Linuxu

  3. 5 Praktické příklady příkazu dd v Linuxu