Android

Polecenie Tr w systemie Linux z przykładami

LinuxAdministrator - sudo #010 #LinuxAdministrator #bash #linux

LinuxAdministrator - sudo #010 #LinuxAdministrator #bash #linux

Spisu treści:

Anonim

tr to narzędzie wiersza polecenia w systemach Linux i Unix, które tłumaczy, usuwa i wyciska znaki ze standardowego wejścia i zapisuje wynik na standardowym wyjściu.

Polecenie tr może wykonywać takie operacje, jak usuwanie powtarzających się znaków, konwersja wielkich liter na małe litery oraz podstawowa zamiana i usuwanie znaków. Zwykle jest on używany w połączeniu z innymi poleceniami za pośrednictwem potokowania.

W tym samouczku pokażemy, jak używać polecenia tr poprzez praktyczne przykłady i szczegółowe objaśnienia najczęściej używanych opcji.

Jak korzystać z polecenia tr

Składnia polecenia tr jest następująca:

tr OPTION… SET1

tr akceptuje dwa zestawy znaków, zwykle o tej samej długości, i zastępuje znaki pierwszego zestawu odpowiednimi znakami z drugiego zestawu.

SET jest w zasadzie ciągiem znaków, w tym specjalnymi znakami odwrotnego ukośnika.

W poniższym przykładzie tr zastąpi wszystkie znaki ze standardowego wejścia (linuxize), odwzorowując znaki z pierwszego zestawu na pasujące znaki z drugiego zestawu.

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

Każde wystąpienie l jest zastępowane przez r , i przez e , zaś n przez d :

reduxeze

Zestawy znaków można również zdefiniować przy użyciu zakresów znaków. Na przykład zamiast pisać:

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

możesz użyć:

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

Gdy używana jest opcja -c ( --complement ), tr zastępuje wszystkie znaki, których nie ma w SET1.

W poniższym przykładzie wszystkie znaki oprócz „li” zostaną zastąpione ostatnim znakiem z drugiego zestawu:

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

liyyyiyyy

Jak można zauważyć, powyższe wyjście ma jeden bardziej widoczny znak niż wejście. Wynika to z faktu, że polecenie echo wypisuje niewidoczny znak nowej linii który jest również zastępowany przez y . Aby powtórzyć ciąg bez nowej linii, użyj opcji -n .

Opcja -d ( --delete ) mówi tr aby usunąć znaki określone w SET1. Usuwając znaki bez ściskania, określ tylko jeden zestaw.

Poniższe polecenie usunie znaki l , z :

echo 'Linuxize' | tr -d 'liz'

Znak L nie jest usuwany, ponieważ wejście zawiera wielką literę L podczas gdy znak l w SET jest pisany małymi literami.

Lnuxe

Opcja -s ( --squeeze-repeats ) zastępuje sekwencję powtarzających się wystąpień zestawem znaków z ostatniego ZESTAWU.

W poniższym przykładzie tr usuwa powtarzające się spacje:

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

GNU \ Linux

Gdy używany jest SET2, sekwencja znaku określonego w SET1 jest zastępowana przez SET2.

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

GNU_\_Linux

Opcja -t ( --truncate-set1 ) zmusza tr do --truncate-set1 SET1 do długości SET2 przed dalszym przetwarzaniem.

Domyślnie, jeśli SET1 jest większy niż SET2, tr ponownie użyje ostatniego znaku SET2. Oto przykład:

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

Dane wyjściowe pokazują, że znak e z zestawu SET1 jest dopasowany do najnowszego znaku zestawu SET2, którym jest 2 :

Linux iz2

Teraz użyj tego samego polecenia z opcją -t :

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

Linux ize

Widać, że ostatnie trzy znaki z SET1 zostały usunięte. SET1 staje się „ab”, tej samej długości co SET2 i nie dokonuje się zamiany.

Łączenie opcji

Polecenie tr pozwala także łączyć jego opcje. Na przykład następujące polecenie najpierw zamienia wszystkie znaki oprócz i 0 a następnie ściska powtarzające się 0 znaków:

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

0i0i0

Przykłady poleceń Tr

W tej sekcji omówimy kilka przykładów typowych zastosowań polecenia tr .

Konwertuj małe litery na wielkie

Konwersja małych liter na wielkie lub odwrotne jest jednym z typowych przypadków użycia polecenia tr . dopasowuje wszystkie małe litery i dopasowuje wszystkie wielkie litery.

echo 'Linuxize' | tr '' ''

LINUXIZE

Zamiast klas postaci możesz także użyć zakresów:

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

Aby przekonwertować wielkie litery na małe, po prostu zmień miejsce zbiorów.

Usuń wszystkie znaki nienumeryczne

Następujące polecenie usuwa wszystkie znaki nienumeryczne:

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

oznacza wszystkie znaki cyfrowe, a użycie opcji -c powoduje usunięcie wszystkich znaków innych niż cyfry. Dane wyjściowe będą wyglądać następująco:

1234567890

Umieść każde słowo w nowym wierszu

Aby umieścić każde słowo w nowym wierszu, musimy dopasować wszystkie znaki niealfanumeryczne i zastąpić je nowym wierszem:

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

GNU is an operating system

Usuń puste linie

Aby usunąć puste linie, po prostu ściśnij 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 dane wyjściowe polecenia w new_file.txt .

Wydrukuj katalogi $PATH w osobnym wierszu

Zmienna środowiskowa $PATH to rozdzielona dwukropkami lista katalogów, która informuje powłokę, które katalogi mają wyszukać pliki wykonywalne 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

Wniosek

tr to polecenie służące do tłumaczenia lub usuwania znaków.

Chociaż bardzo przydatny, tr może działać tylko z pojedynczymi znakami. Do bardziej skomplikowanego dopasowywania wzorów i manipulowania łańcuchami należy użyć sed lub awk .

terminal tr