Android

Příkaz Tr v linuxu s příklady

The mind behind Linux | Linus Torvalds

The mind behind Linux | Linus Torvalds

Obsah:

Anonim

tr je obslužný program příkazového řádku v systémech Linux a Unix, který překládá, odstraňuje a maže znaky ze standardního vstupu a zapisuje výsledek na standardní výstup.

Příkaz tr může provádět operace, jako je odstraňování opakovaných znaků, převádění velkých písmen na malá písmena a nahrazování a odstraňování základních znaků. Obvykle se používá v kombinaci s jinými příkazy pomocí potrubí.

V tomto tutoriálu vám ukážeme, jak používat příkaz tr prostřednictvím praktických příkladů a podrobných vysvětlení nejběžnějších možností.

Jak používat příkaz tr

Syntaxe příkazu tr je následující:

tr OPTION… SET1

tr přijímá dvě sady znaků, obvykle se stejnou délkou, a nahradí znaky první sady odpovídajícími znaky z druhé sady.

SET je v podstatě řetězec znaků, včetně speciálních znaků se zpětným lomítkem.

V následujícím příkladu tr nahradí všechny znaky ze standardního vstupu (linuxize) mapováním znaků z první sady s odpovídajícími z druhé sady.

echo 'linuxize' | tr 'lin' 'red'

Každý výskyt l je nahrazen r , i za e n : d :

reduxeze

Znakové sady lze také definovat pomocí znakových rozsahů. Například místo psaní:

echo 'linuxize' | tr 'lmno' 'wxyz'

Můžeš použít:

echo 'linuxize' | tr 'ln' 'w-z'

Při --complement volby -c ( --complement ) tr nahradí všechny znaky, které nejsou v SET1.

V příkladu níže budou všechny znaky kromě „li“ nahrazeny posledním znakem z druhé sady:

echo 'linuxize' | tr -c 'li' 'xy'

liyyyiyyy

Jak jste si možná všimli, výše uvedený výstup má ještě jeden viditelný znak než vstup. Je to proto, že příkaz echo vytiskne neviditelný znak nového řádku který je také nahrazen y . Chcete-li opakovat řetězec bez nového řádku, použijte volbu -n .

Volba -d ( --delete ) řekne tr aby odstranil znaky uvedené v SET1. Při mazání znaků bez mačkání zadejte pouze jednu sadu.

Příkaz níže odstraní znaky l , i a z :

echo 'Linuxize' | tr -d 'liz'

Znak L není odstraněn, protože vstup zahrnuje velká písmena L zatímco znak l v SET je malými písmeny.

Lnuxe

Volba -s ( --squeeze-repeats ) nahradí sekvenci opakovaných výskytů znakovou sadou v posledním SET.

V následujícím příkladu tr odstraní opakované mezery:

echo "GNU \ Linux" | tr -s ' '

GNU \ Linux

Při použití SET2 se posloupnost znaků zadaných v SET1 nahradí SET2.

echo "GNU \ Linux" | tr -s ' ' '_'

GNU_\_Linux

Volba -t (- --truncate-set1 ) přinutí tr aby před dalším zpracováním --truncate-set1 SET1 na délku SET2.

Ve výchozím nastavení, pokud je SET1 větší než SET2, bude tr znovu použit poslední znak SET2. Zde je příklad:

echo 'Linux ize' | tr 'abcde' '12'

Výstup ukazuje, že znak e z SET1 je spojen s nejnovějším znakem SET2, který je 2 :

Linux iz2

Nyní použijte stejný příkaz s volbou -t :

echo 'Linux ize' | tr -t 'abcde' '12'

Linux ize

Vidíte, že poslední tři znaky SET1 jsou odstraněny. SET1 se stává „ab“, stejnou délkou jako SET2 a neprovádí se žádná výměna.

Kombinace možností

Příkaz tr vám také umožňuje kombinovat jeho možnosti. Například následující příkaz nejprve nahradí všechny znaky kromě i číslem 0 a poté stiskne opakované 0 znaků:

echo 'Linux ize' | tr -cs 'i' '0'

0i0i0

Příklady příkazů Tr

V této části si ukážeme několik příkladů běžného použití příkazu tr .

Převést malá písmena na velká písmena

Převod malých a velkých písmen nebo převrácení je jedním z typických případů použití příkazu tr . odpovídá všem malým písmenům a odpovídá všem velkým písmenům.

echo 'Linuxize' | tr '' ''

LINUXIZE

Místo tříd znaků můžete použít také rozsahy:

echo 'Linuxize' | tr 'az' 'A-Z'

Chcete-li převést velká písmena na malá písmena, jednoduše přepněte místa sad.

Odstraňte všechny nečíselné znaky

Následující příkaz odstraní všechny nečíselné znaky:

echo "my phone is 123-456-7890" | tr -cd

je zkratka pro všechny číselné znaky a pomocí volby -c odstraní příkaz všechny číslice bez číslic. Výstup bude vypadat takto:

1234567890

Vložte každé slovo do nového řádku

Abychom každé slovo vložili do nového řádku, musíme shodovat všechny nealfanumerické znaky a nahradit je novým řádkem:

echo 'GNU is an operating system' | tr -cs '' '\n'

GNU is an operating system

Odstraňte prázdné řádky

Chcete-li vymazat prázdné řádky, jednoduše stiskněte opakující se znaky nového řádku:

tr -s '\n' < file.txt > new_file.txt

Ve výše uvedeném příkazu používáme symbol přesměrování < pro předání obsahu file.txt příkazu tr . Přesměrování > zapíše výstup příkazu do new_file.txt .

Tisk adresářů $PATH na samostatný řádek

Proměnná prostředí $PATH je seznam adresářů oddělených dvojtečkou, který říká shellu, které adresáře mají při psaní příkazu hledat spustitelné soubory.

Chcete-li vytisknout každý adresář na samostatném řádku, musíme porovnat dvojtečku (:) a nahradit ji novým řádkem:

echo $PATH | tr ':' '\n'

/usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin

Závěr

tr je příkaz pro překlad nebo mazání znaků.

Ačkoli je to velmi užitečné, tr může pracovat pouze s jednotlivými znaky. Pro složitější porovnávání vzorků a manipulaci s řetězci byste měli použít sed nebo awk .

tr terminál