tr
jest narzędziem wiersza poleceń w systemach Linux i Unix, które tłumaczy, usuwa i wyciska znaki ze standardowego wejścia i zapisuje wynik na standardowe wyjście.
polecenietr
może wykonywać operacje takie jak usuwanie powtarzających się znaków, konwersja wielkich liter na małe oraz zastępowanie i usuwanie podstawowych znaków. Zazwyczaj jest on używany w połączeniu z innymi poleceniami za pomocą orurowania.,
w tym samouczku pokażemy Ci, jak używać polecenia tr
poprzez praktyczne przykłady i szczegółowe wyjaśnienia najczęstszych opcji.
jak używać polecenia tr #
składnia poleceniatr
jest następująca:
tr OPTION... SET1
tr
akceptuje dwa zestawy znaków, Zwykle o tej samej długości, i Zastępuje znaki z pierwszych zestawów odpowiednimi znakami z drugiego zestawu.,
aSET
jest w zasadzie ciągiem znaków, włącznie ze specjalnymi znakami z odwrotnym ukośnikiem.
w poniższym przykładzietr
zastąpi wszystkie znaki ze standardowego wejścia (linuxize), mapując znaki z pierwszego zestawu z pasującymi znakami z drugiego zestawu.,
echo 'linuxize' | tr 'lin' 'red'
każde wystąpienie l
zastępuje się r
, i
z e
n
with d
:
reduxeze
zestawy znaków mogą być również zdefiniowane za pomocą zakresów znaków., Na przykład, zamiast zapisu:
echo 'linuxize' | tr 'lmno' 'wxyz'
możesz użyć:
echo 'linuxize' | tr 'l-n' 'w-z'
gdy -c
(--complement
) opcja jest używana, tr
zastępuje wszystkie znaki, które nie znajdują się w zestawie1.
w poniższym przykładzie wszystkie znaki oprócz „li” zostaną zastąpione przez ostatni znak z drugiego zestawu:
echo 'linuxize' | tr -c 'li' 'xy'
liyyyiyyy
jak zapewne zauważyłeś, powyższe wyjście ma o jeden bardziej widoczny znak niż wejście., Dzieje się tak dlatego, że polecenie echo
wyświetla niewidoczny znak nowej linii \n
, który jest również zastąpiony y
. Aby wyświetlić Echo łańcucha bez nowej linii, użyj opcji -n
.
-d
(--delete
) opcja mówitr
aby usunąć znaki określone w SET1. Podczas usuwania znaków bez wyciskania określ tylko jeden zestaw.,
poniższe polecenie usunie l
, i
I z
znaki:
echo 'Linuxize' | tr -d 'liz'
L
znak nie jest usuwany, ponieważ wejście zawiera wielkie litery L
podczas gdy l
znak w zestawie jest małe.
Lnuxe
-s
(--squeeze-repeats
) opcja zastępuje sekwencję powtarzających się wystąpień zestawem znaków w ostatnim zestawie.,
w poniższym przykładzietr
usuwa powtarzające się znaki spacji:
echo "GNU \ Linux" | tr -s ' '
GNU \ Linux
gdy używany jest SET2, sekwencja znaków określona w SET1 jest zastępowana przez SET2.
echo "GNU \ Linux" | tr -s ' ' '_'
GNU_\_Linux
-t
(--truncate-set1
) opcja wymusza tr
aby obciąć set1 do długości set2 przed wykonaniem dalszego przetwarzania.,
domyślnie, jeśli SET1 jest większy niż SET2,tr
użyje ostatniego znaku SET2. Oto przykład:
echo 'Linux ize' | tr 'abcde' '12'
wyjście pokazuje, że znak e
z SET1 jest dopasowany do najnowszego znaku SET2, który jest 2
:
Linux iz2
teraz użyj tej samej komendy z opcją -t
:
echo 'Linux ize' | tr -t 'abcde' '12'
Linux ize
możesz zobaczyć, że trzy ostatnie znaki set1 są usunięte., SET1 staje się „ab”, o tej samej długości co SET2 i nie jest zastępowany.
łączenie opcji #
polecenietr
umożliwia również łączenie jej opcji. Na przykład, następujące polecenie najpierw zastępuje wszystkie znaki z wyjątkiem i
z 0
, a następnie wyciska powtarzające się 0
znaki:
echo 'Linux ize' | tr -cs 'i' '0'
iv id=”4a6e5bba9a”
przykłady poleceń TR #
w tej sekcji omówimy kilka przykładów typowych zastosowań polecenia tr
.,
Konwersja małych liter na wielkie litery #
Konwersja małych liter na wielkie litery lub odwrotnie jest jednym z typowych przypadków użycia poleceniatr
. pasuje do wszystkich małych liter, a
pasuje do wszystkich wielkich liter.
echo 'Linuxize' | tr '' ''
LINUXIZE
zamiast klas znaków, możesz również użyć zakresów:
echo 'Linuxize' | tr 'a-z' 'A-Z'
aby przekonwertować wielkie litery na małe, po prostu zmień miejsca zestawów.,
Usuń wszystkie znaki inne niż numeryczne #
następujące polecenie usuwa wszystkie znaki inne niż numeryczne:
echo "my phone is 123-456-7890" | tr -cd
oznacza wszystkie znaki cyfrowe, a używając opcji
-c
, polecenie usuwa wszystkie znaki inne niż cyfry postaci.,będzie wyglądać tak:
1234567890
umieść każde słowo w nowej linii #
aby umieścić każde słowo w nowej linii, musimy dopasować wszystkie znaki niealfanumeryczne i zastąpić je nową linią:
echo 'GNU is an operating system' | tr -cs '' '\n'
GNUisanoperatingsystem
Usuń puste linie #
aby usunąć puste linie, wystarczy wycisnąć powtarzające się znaki nowej linii:
tr -s '\n' < file.txt > new_file.txt
w powyższym poleceniu używamy symbolu przekierowania <
aby przekazać zawartość file.txt
do polecenia tr
., Przekierowanie>
zapisuje wyjście polecenia do new_file.txt
.
wypisuje katalogi $PATH w oddzielnej linii #
zmienna środowiskowa $PATH
jest rozdzielaną dwukropkami listą katalogów, która informuje powłokę, które katalogi mają szukać plików wykonywalnych po wpisaniu polecenia.,
aby wydrukować każdy katalog w osobnej linii, musimy dopasować dwukropek (:
) I zastąpić go nową linią:
echo $PATH | tr ':' '\n'
/usr/local/sbin/usr/local/bin/usr/sbin/usr/bin/sbin/bin
podsumowanie #
tr
jest poleceniem do tłumaczenia lub usuwania znaków.
chociaż bardzo przydatne,tr
może działać tylko z pojedynczymi znakami. Do bardziej skomplikowanego dopasowywania wzorców i manipulacji łańcuchami należy użyć sed
lub awk
.