Skutečná síla Linuxu spočívá v tom, že existuje mnoho programů/utilit vytvořených pro usnadnění našeho života. Když ve svém prostředí píšete mnoho skriptů shellu, tato sada programů se hodí, kde budete tyto programy používat k manipulaci se vstupem nebo výstupem ve skriptech. Jedním z takových nástrojů je tr
, což znamená přeložit . Jak název napovídá, příkaz tr se používá k překladu, mačkání a mazání znaků ze standardního vstupu a zápisu na standardní výstup v operačních systémech Linux a Unix.
V tomto článku se naučíme použití příkazu tr s praktickými příklady. Na konci této příručky budete s používáním příkazu tr pohodlnější a zjistíte, v jakém scénáři by použití tohoto příkazu bylo přínosné.
syntaxe příkazu tr a nápověda
Chcete-li znát syntaxi a seznam argumentů, které příkaz tr podporuje, přejděte na manuálovou stránku nebo použijte --help
příznak pomocí tr
příkaz.
$ man tr
$ tr --help
tr
příkaz přijímá dva argumenty ve tvaru SET1 a SET2 kde SET1 budou vstupní znaky, které budou přeloženy znaky v SET2 . Když jsou určité příznaky předány příkazu tr, může být volitelně použit SET2.
tr [OPTION]… SET1 [SET2]
Příklad 1 – Překlad pomocí příkazu tr
Níže je jednoduchý příklad použití tr
příkaz. tr
příkaz je přenášen pomocí echo
příkaz a malá písmena "ost" je převedeno na velká písmena „OST“ .
Konverze zde proběhne na základě pozice postav ve dvou sadách. První znak v sadě 1 bude nahrazen prvním znakem v sadě 2 (o->O ), podobně pro všechny znaky (s->S ,t->T ).
$ echo "ostechnix" | tr "ost" "OST"
OSTechnix
Doporučené čtení:
- Příkaz Bash Echo vysvětlený s příklady v Linuxu
Příklad 2 – Znakové sady a speciální znaky
tr
příkaz nabízí použití znakových sad, což velmi usnadňuje převod. tr
příkaz může také interpretovat speciální znaky jako (\n
,\t
,\v
), které lze přeložit pomocí různých znaků.
Podívejme se, jak používat znakovou sadu. V níže uvedeném příkladu mám řetězce, celá čísla a interpunkční znaménka. interpunkční znaky jsou nahrazeny tečkou (.
) pomocí "[:punct:]"
znaková sada.
$ echo "Ubuntu 20.04 #$%^" | tr "[:punct:]" "."
Příklad 3 – Převod případu
Při práci se strunami můžete chtít změnit velikost písmen z dolní na horní nebo naopak. Pomocí tr
můžete provést převod velkých a malých písmen různými způsoby.
Prvním způsobem můžete zadat a do z v sadě 1 i sadě 2.
$ echo "ostechnix" | tr "abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
OSTECHNIX
Upozorňujeme, že toto není preferovaný způsob.
Místo psaní všech znaků můžete také použít rozsahy (tj. a-z , A–Z ).
$ echo "ostechnix" | tr "a-z" "A-Z" # Lower to Upper case
OSTECHNIX
$ echo "OSTECHNIX" | tr "A-Z" "a-z" # Upper to Lower case
ostechnix
Třídy znaků lze také použít místo dvou výše uvedených metod.
$ echo "OSTECHNIX" | tr "[:upper:]" "[:lower:]"
ostechnix
$ echo "ostechnix" | tr "[:lower:]" "[:upper:]"
OSTECHNIX
Příklad 4 – Odstranění znaků
Existuje sada volitelných argumentů, které tr
podporuje provádění různých akcí.
Jedním takovým příznakem je "-d
nebo --delete
", který odstraní znaky, které jsou uvedeny v SET1.
Níže je vstup, kde mám tři IP adresy s bílými mezerami v každém řádku a tabulátory (2) ve třetím řádku. Nyní pomocí -d
příznak můžete vyčistit bílá místa.
192.168. 1. 12 192.168. 1. 13 192.168. 1. 14
Spusťte níže uvedený příkaz, který odstraní všechna bílá místa. Zde je důležité poznamenat, že se neodstraňují karty, ale pouze mezery.
$ tr -d " " < tr_test.txt
Pokud chcete odstranit mezeru i tabulátory (horizontální mezery), můžete použít "[:blank:]"
znaková sada.
$ tr -d "[:blank:]" < tr_test.txt
Můžete také použít "[:space:]"
znaková sada pro odstranění vodorovných a svislých mezer.
$ tr -d "[:space:]" < tr_test.txt
Příklad 5 – opakování stlačení
Když je příznak "-s
nebo --squeeze-repeats
", opakované znaky uvedené v SET1 budou nahrazeny jedním výskytem znaku. V níže uvedeném příkladu můžete vidět, že jsem použil 4 rovné (=
) podepsat. Nyní -s
nahradí 4 (=
) s 1 (=
).
$ echo "Production IP ==== 192.168.1.10" | tr -s "=" Production IP = 192.168.1.10
Níže je uveden další příklad, kde jsou znaky nového řádku (\n
) jsou zmáčknuté.
$ cat tr_test.txt | tr -s "\n"
Příklad 6 – Doplněk
Když -c
příznak, provede inverzní překlad pro danou množinu. V níže uvedeném příkladu tr přeloží všechny abecedy na "*"
normálně. Ale když -c
je použit, operace bude obrácena. Kromě abecedy budou všechny ostatní znaky nahrazeny "*"
.
$ echo "Employee Number is 1267890" | tr -c "[:alpha:]" "*"
Můžete to zkombinovat s jinými příznaky, abyste získali určité výsledky. Například při kombinaci s -d
flag, provede inverzní operaci odstranění.
$ echo "Employee Number is 1267890" | tr -cd "[:digit:]"
Poznámka: Z výše uvedeného příkladu můžete vidět, že znak nového řádku je také přeložen/smazán. Při použití této metody si tento bod poznamenejte a pokračujte.
Příklad 7 – Přesměrování výstupu
Ve všech předchozích částech jsme načetli vstup ze souboru a provedli nějaké zpracování pomocí tr
a výstup je odeslán do terminálu. Pokud chcete přesměrovat výstup do souboru místo na terminál, použijte operátor přesměrování.
$ tr -s "\n" < tr_test.txt > new_tr_test.txt
$ cat new_tr_test.txt
Související čtení:
- Přesměrování Bash vysvětleno na příkladech
Závěr
V tomto článku jsem vás provedl tím, jak používat tr
příkaz. V Linuxu vždy existuje několik způsobů, jak dosáhnout stejné věci. Cokoli jsme ukázali v tomto článku, lze také dosáhnout jinými programy, jako je sed
, awk
, atd. Ale znalost těchto příkazů a různých způsobů vám pomůže rozhodnout se ve správné situaci pro použití správného příkazu/programu.