Jak používat příkaz rev v systému Linux

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:

  • echo pošle řetězec prvnímu rev.
  • rev obrátí řetězec a předá ho cut.
  • 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říklad 2-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:

  • echo pošle řetězec prvnímu rev.
  • rev obrátí řetězec a předá ho cut.
  • 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:

  • rev obrátí řádky v souboru a předá je cut.
  • 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.
  • rev obrátí řetězce zpět do původního pořadí a výstup se znovu ořízne pomocí cut.
  • Volba -c říká cut ať 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í:

  • ls vypíše soubory v aktuálním adresáři a výstup se předá rev.
  • rev obrátí jména souborů a předá je cut.
  • cut vrá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.
  • rev obrátí přípony souborů do původního pořadí. Ty jsou poté setříděny.
  • sort setřídí přípony a výsledek je předán do uniq.
  • uniq vrá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í.