Příkaz rev v Linuxu slouží k obrácení pořadí znaků v textových řetězcích. Funguje jak s textem zadaným přímo, tak s obsahem souborů. Ačkoli se zdá být jednoduchý, jeho skutečný potenciál se odhalí v kombinaci s dalšími příkazy.
Tento nenápadný nástroj provádí jedinou operaci – zrcadlově obrací text. Kromě zobrazení nápovědy pomocí -h a verze pomocí -V, nepřijímá žádné jiné parametry příkazové řádky.
Takže rev jen obrací text, a to je vše? Žádné další možnosti? Ano i ne. Nemá žádné doplňující volby, ale jeho možnosti tím nekončí. Ukážeme si, jak ho využít v komplexnějších operacích.
Jeho síla se projeví, když jej použijete jako stavební prvek v složitějších příkazech. Podobně jako tac nebo yes, i rev je „facilitátor“ – jeho užitečnost se projeví ve zjednodušení použití jiných příkazů.
Použití příkazu rev
Pokud spustíte rev bez dalších parametrů, bude čekat na vstup z klávesnice, obrátí zadaný text a zobrazí jej. Bude takto pracovat, dokud nezadáte Ctrl+C.
rev
Když napíšete text a stisknete Enter, rev zobrazí obrácený řetězec – pokud nejde o palindrom, samozřejmě.

Předávání textu příkazu rev
Text můžete do rev poslat pomocí příkazu echo:
echo one two three | rev

Příkaz rev lze použít i pro obrácení obsahu celého textového souboru, řádek po řádku. V tomto případě máme soubor „filelist.txt“ obsahující seznam jmen souborů.
rev filelist.txt

Každý řádek souboru se načte, obrátí a zobrazí v terminálu.
Kombinace rev s dalšími příkazy
Podívejme se na příklad, kde je rev použit dvakrát:
Tento příkaz odstraní poslední znak z textového řetězce. To může být užitečné pro odstranění interpunkce. Použijeme k tomu příkaz cut, který nám pomůže extrahovat znaky.
echo 'Remove punctuation.' | rev | cut -c 2- | rev

Rozložme si tento příkaz:
echopošle řetězec prvnímurev.revobrátí řetězec a předá hocut.- Volba
-c(znaky) říkácut, ať vrátí sekvenci znaků. - Volba
2-říkácut, aby vrátil rozsah znaků od druhého znaku do konce řádku. Kdybychom zadali například2-5, vracel by se rozsah od druhého do pátého znaku. Žádné druhé číslo znamená „až do konce řetězce“. - Obrácený řetězec – bez prvního znaku – se předá dalšímu
rev, který vrátí řetězec do původního pořadí.
Tím, že jsme ořízli první znak obráceného řetězce, jsme odstranili poslední znak původního řetězce. Jistě, můžeme to udělat i pomocí sed nebo awk, ale tato syntaxe je jednodušší.
Oddělení posledního slova
Podobným trikem můžeme získat poslední slovo řádku.
Příkaz se podobá předchozímu, opět využívá rev dvakrát. Rozdíl je v tom, jak cut vybírá části textu.
echo 'Separate the last word' | rev | cut -d' ' -f1 | rev

Zde je rozklad příkazu:
echopošle řetězec prvnímurev.revobrátí řetězec a předá hocut.- Volba
-d' '(oddělovač) říkácut, aby vracel sekvence znaků oddělené mezerou. - Volba
-f1říkácut, aby vrátil první část řetězce bez oddělovače, tedy první část věty až k první mezeře. - Obrácené první slovo se předá dalšímu
rev, který vrátí řetězec do původního pořadí.
Tím, že jsme extrahovali první slovo obráceného řetězce, jsme získali poslední slovo původního řetězce. Poslední slovo věty bylo „word“, a to jsme si vytiskli.
Ořezávání obsahu ze souborů
Představme si, že máme soubor obsahující seznam jmen souborů v uvozovkách. Chceme tyto uvozovky odstranit.
Podívejme se na obsah souboru:
less filelist.txt

Soubor se nám zobrazí pomocí less.

K odstranění interpunkce z obou konců řádků můžeme použít následující příkaz. Využívá dvakrát rev a cut:
rev filelist.txt | cut -c 2- | rev | cut -c 2-

Jména souborů jsou vypsána bez uvozovek.

Rozklad příkazu:
revobrátí řádky v souboru a předá jecut.- Volba
-c(znaky) říkácut, ať vrátí sekvenci znaků z každého řádku. - Volba
2-říkácut, ať vrátí rozsah znaků od druhého znaku do konce každého řádku. - Obrácené řetězce, mínus jejich první znaky, se předají
rev. revobrátí řetězce zpět do původního pořadí a výstup se znovu ořízne pomocícut.- Volba
-cříkácutať vrací sekvenci znaků. - Volba
2-opět říká, ať se vrátí rozsah znaků od druhého znaku po konec řádku. Tím „přeskočíme“ uvozovku, která je první znak na každém řádku.
Rozsáhlé řetězení příkazů
Zde je příkaz, který vrátí setříděný seznam všech přípon souborů v aktuálním adresáři, využívající pět různých příkazů Linuxu:
ls | rev | cut -d'.' -f1 | rev | sort | uniq

Postup je následující:
lsvypíše soubory v aktuálním adresáři a výstup se předárev.revobrátí jména souborů a předá jecut.cutvrátí první část každého jména souboru až po oddělovač.-d'.'říkácut, ať používá tečku „.“ jako oddělovač. První část obrácených jmen souborů, až k první tečce, jsou přípony souborů. Výstup se předárev.revobrátí přípony souborů do původního pořadí. Ty jsou poté setříděny.sortsetřídí přípony a výsledek je předán douniq.uniqvrátí jeden výpis pro každý unikátní typ přípony souboru. Pokud soubor nemá příponu (například makefile nebo adresáře Help a gc_help), je uveden celý název souboru.
Nakonec můžeme do uniq přidat volbu -c (count) pro zobrazení počtu výskytů:
ls | rev | cut -d'.' -f1 | rev | sort | uniq -c

Nyní získáme seznam různých typů souborů v aktuálním adresáři, s počtem výskytů každého z nich.
Je to docela šikovný jednorádkový příkaz!
Závěr
Někdy je potřeba jít zpět, abychom se mohli posunout vpřed. A obvykle se nejrychleji dostaneme vpřed, když jsme součástí týmu.
Přidejte rev do svého arzenálu příkazů a brzy ho budete používat ke zjednodušení i jinak složitých příkazových sekvencí.