Linuxový příkaz rev obrátí textové řetězce. Tento příkaz může fungovat buď s poskytnutým textem nebo souborem, a zdá se zdánlivě jednoduchý. Ale stejně jako mnoho nástrojů příkazového řádku se jeho skutečná síla projeví, když je zkombinujete s jinými příkazy.
Příkaz rev je jednou z těch jednoduchých linuxových utilit, která se na první pohled jeví jako něco zvláštního. Provádí jedinou funkci: obrací řetězce. A kromě možnosti vytisknout stránku rychlé nápovědy (-h) a ukázat vám její číslo verze (-V), nepřijímá žádné možnosti příkazového řádku.
Takže rev obrací struny a je to? Žádné varianty nebo možnosti? No ano i ne. Ano, nemá žádné permutace, ale ne, to je sotva vše. Tento tutoriál vám ukáže, jak to zkombinovat pro výkonné operace.
Když použijete rev jako stavební kámen v komplikovanějších příkazových sekvencích, začne to skutečně ukazovat svou hodnotu. rev je jedním ze skupiny příkazů (jako tac a yes), které jsou facilitátory. Je snazší ocenit jejich užitečnost, když uvidíte, jak zefektivňují použití jiných příkazů.
Table of Contents
Pomocí příkazu rev
Při použití na příkazovém řádku bez dalších parametrů rev převezme jakýkoli zadaný vstup, obrátí jej a poté jej vytiskne v okně terminálu. Bude to dělat, dokud nestisknete Ctrl+C pro ukončení.
rev
Pokud napíšete nějaký text a stisknete Enter, rev vytiskne řetězec obráceně – pokud jej nezadáte a palindrom, samozřejmě.
Předávání textu rev
Můžete použít echo k převodu textu do rev.
echo one two three | rev
Můžete také použít rev k obrácení obsahu celého souboru textu, řádek po řádku. V tomto příkladu máme soubor obsahující seznam názvů souborů. Soubor se nazývá „filelist.txt“.
rev filelist.txt
Každý řádek je načten ze souboru, obrácen a poté vytištěn do okna terminálu.
Kombinace rev s jinými příkazy
Zde je příklad použití potrubí vstupu, které volá rev dvakrát.
Tento příkaz odstraní poslední znak z řetězce textu. To by mohlo být užitečné pro odstranění interpunkce. Musíme použít příkaz cut to svléknout postavu.
echo 'Remove punctuation.' | rev | cut -c 2- | rev
Pojďme to rozebrat.
echo pošle řetězec do prvního volání rev.
rev obrací strunu a zavádí ji do řezu.
Volba -c (znaky) říká cut, aby vrátil sekvenci znaků z řetězce.
Volba 2- říká střihu, aby vrátil rozsah znaků od znaku dva do konce řádku. Pokud by bylo zadáno druhé číslo, například 2-5, rozsah by byl od dvou do pěti znaků. Žádné druhé číslo neznamená „až do konce řetězce“.
Obrácený řetězec – mínus jeho první znak – je předán rev, který obrátí řetězec, takže se vrátí do původního pořadí.
Protože jsme ořízli první znak obráceného řetězce, ořízli jsme i poslední znak původního řetězce. Ano, můžete to udělat pomocí sed nebo awk, ale toto je jednodušší syntaxe.
Oddělení posledního slova
Podobným trikem můžeme vrátit poslední slovo řádku.
Příkaz je podobný předchozímu: opět používá dvakrát rev. Rozdíly spočívají ve způsobu, jakým se příkaz vyjmout používá k výběru částí textu.
echo 'Separate the last word' | rev | cut -d' ' -f1 | rev
Zde je rozpis příkazů:
echo pošle řetězec do prvního volání rev.
rev obrací strunu a zavádí ji do řezu.
Volba -d‘ ‚ (oddělovač) říká řezu, aby vrátil sekvenci znaků oddělených mezerou.
Volba -f1 říká řezu, aby vrátil první část řetězce, která neobsahuje oddělovač. Tedy první část věty až na první mezeru.
Obrácené první slovo je předáno rev, které obrátí řetězec, takže se vrátí do původního pořadí.
Protože jsme extrahovali první slovo obráceného řetězce, ořízli jsme poslední slovo původního řetězce. Poslední slovo věty bylo „slovo“ a bylo nám vytištěno.
Oříznutí obsahu ze souborů
Řekněme, že máme soubor obsahující seznam názvů souborů a názvy souborů jsou v uvozovkách. Chceme odstranit uvozovky z názvů souborů.
Podívejme se na soubor:
less filelist.txt
Obsah souboru se nám zobrazí méně.
Interpunkci můžeme z obou konců každého řádku odstranit následujícím příkazem. Tento příkaz používá dvakrát otáčky i řez.
rev filelist.txt | cut -c 2- | rev | cut -c 2-
Názvy souborů jsou uvedeny bez uvozovek.
Příkaz se rozpadne takto:
rev obrátí čáry v souboru a převede je do řezu.
Volba -c (znaky) říká řezu, aby vrátil sekvenci znaků z každého řádku.
Možnost 2 říká, že střih má vrátit rozsah znaků od znaku dva až po konec každého řádku.
Obrácené řetězce, mínus jejich první znaky, jsou předány do rev.
rev obrátí struny, takže se vrátí do původního pořadí. Jsou říznuty potrubím podruhé.
Volba -c (znaky) říká řezu, aby vrátil sekvenci znaků z každého řetězce.
Možnost 2 říká, že střih má vrátit rozsah znaků od znaku dva až po konec každého řádku. Toto „přeskočí“ úvodní uvozovku, což je znak jedna na každém řádku.
Hodně potrubí
Zde je příkaz, který vrací seřazený seznam všech přípon souborů v aktuálním adresáři. Používá pět různých příkazů Linuxu.
ls | rev | cut -d'.' -f1 | rev | sort | uniq
Postup je přímočarý:
ls uvádí soubory v aktuálním adresáři. Ty se přivádějí do rev.
rev obrátí názvy souborů a převede je do řezu.
cut vrátí první část každého souboru až po oddělovač. -d‘.‘ říká řezu, aby použil tečku „.“ jako oddělovač. Část obrácených názvů souborů až do první tečky jsou přípony souborů. Ty se přivádějí do rev.
rev obrátí přípony souborů do jejich původního pořadí. Jsou roztříděny potrubím.
sort seřadí přípony souborů a převede výsledky do uniq.
uniq vrátí jeden výpis pro každý typ jedinečné přípony souboru. Všimněte si, že pokud neexistuje žádná přípona souboru (například pro makefile a adresáře Help a gc_help), je uveden celý název souboru.
Chcete-li to dokončit, přidejte do příkazu uniq volbu -c (count) příkazového řádku.
ls | rev | cut -d'.' -f1 | rev | sort | uniq -c
Nyní získáme seřazený seznam různých typů souborů v aktuálním adresáři s počtem každého z nich.
To je docela šikovná jedna vložka!
zásuvka a zásuvka gnioG
Někdy se musíte vrátit zpět, abyste mohli jít vpřed. A obvykle jdeš vpřed nejrychleji jako součást týmu.
Přidejte rev do svého repertoáru příkazů go-to a brzy jej budete používat ke zjednodušení jinak komplikovaných příkazových sekvencí.