tr
ist ein Befehlszeilenprogramm in Linux- und Unix-Systemen, das Zeichen aus der Standardeingabe übersetzt, löscht und komprimiert und das Ergebnis in die Standardausgabe schreibt.
Der tr
Der Befehl kann Vorgänge wie das Entfernen wiederholter Zeichen, das Umwandeln von Großbuchstaben in Kleinbuchstaben und das Ersetzen und Entfernen grundlegender Zeichen ausführen. Typischerweise wird es in Kombination mit anderen Befehlen durch Rohrleitungen verwendet.
In diesem Tutorial zeigen wir Ihnen, wie Sie den tr
verwenden Befehl durch praktische Beispiele und detaillierte Erläuterungen der gängigsten Optionen.
Verwendung des tr
Befehl #
Die Syntax für den tr
Befehl lautet wie folgt:
tr OPTION... SET1 [SET2]
tr
akzeptiert zwei Sätze von Zeichen, normalerweise mit der gleichen Länge, und ersetzt die Zeichen des ersten Satzes durch die entsprechenden Zeichen des zweiten Satzes.
Ein SET
ist im Grunde eine Zeichenkette, einschließlich der speziellen Backslash-escaped Zeichen.
Im folgenden Beispiel tr
ersetzt alle Zeichen aus der Standardeingabe (Linuxize), indem die Zeichen aus dem ersten Satz mit den passenden Zeichen aus dem zweiten Satz verknüpft werden.
echo 'linuxize' | tr 'lin' 'red'
Jedes Vorkommen von l
wird durch r
ersetzt , i
mit e
, und n
mit d
:
reduxeze
Die Zeichensätze können auch über Zeichenbereiche definiert werden. Schreiben Sie beispielsweise statt:
echo 'linuxize' | tr 'lmno' 'wxyz'
Sie können verwenden:
echo 'linuxize' | tr 'l-n' 'w-z'
Wenn -c
(--complement
) Option verwendet wird, tr
ersetzt alle Zeichen, die nicht in SET1 sind.
Im Beispiel unten werden alle Zeichen außer „li“ durch das letzte Zeichen aus dem zweiten Satz ersetzt:
echo 'linuxize' | tr -c 'li' 'xy'
liyyyiyyy
Wie Sie vielleicht bemerkt haben, hat die obige Ausgabe ein sichtbares Zeichen mehr als die Eingabe. Das liegt daran, dass das echo
Befehl gibt ein unsichtbares Zeilenumbruchzeichen \n
aus das wird auch durch y
ersetzt . Um einen String ohne Zeilenumbruch wiederzugeben, verwenden Sie -n
Option.
Das -d
(--delete
) Option teilt tr
mit um in SET1 angegebene Zeichen zu löschen. Geben Sie beim Löschen von Zeichen ohne Zusammendrücken nur einen Satz an.
Der folgende Befehl entfernt l
, i
und z
Zeichen:
echo 'Linuxize' | tr -d 'liz'
Das L
Zeichen wird nicht gelöscht, da die Eingabe einen großen L
enthält während der l
Zeichen im SET ist Kleinbuchstabe.
Lnuxe
Das -s
(--squeeze-repeats
) Option ersetzt eine Folge wiederholter Vorkommen durch den Zeichensatz im letzten SET.
Im folgenden Beispiel tr
entfernt die wiederholten Leerzeichen:
echo "GNU \ Linux" | tr -s ' '
GNU \ Linux
Bei Verwendung von SET2 wird die Folge des in SET1 angegebenen Zeichens durch SET2 ersetzt.
echo "GNU \ Linux" | tr -s ' ' '_'
GNU_\_Linux
Das -t
(--truncate-set1
) Option erzwingt tr
um SET1 vor der weiteren Verarbeitung auf die Länge von SET2 zu kürzen.
Standardmäßig, wenn SET1 größer als SET2 ist tr
wird das letzte Zeichen von SET2 wiederverwenden. Hier ist ein Beispiel:
echo 'Linux ize' | tr 'abcde' '12'
Die Ausgabe zeigt, dass das Zeichen e
von SET1 wird mit dem letzten Zeichen von SET2 abgeglichen, das ist 2
:
Linux iz2
Verwenden Sie nun denselben Befehl mit dem -t
Möglichkeit:
echo 'Linux ize' | tr -t 'abcde' '12'
Linux ize
Sie können sehen, dass die letzten drei Zeichen des SET1 entfernt werden. SET1 wird zu „ab“, hat die gleiche Länge wie SET2, und es wird kein Ersatz vorgenommen.
Optionen kombinieren #
Der tr
Mit dem Befehl können Sie auch seine Optionen kombinieren. Beispielsweise ersetzt der folgende Befehl zunächst alle Zeichen außer i
mit 0
und drückt dann die wiederholte 0
Zeichen:
echo 'Linux ize' | tr -cs 'i' '0'
0i0i0
Tr-Befehlsbeispiele #
In diesem Abschnitt behandeln wir einige Beispiele für häufige Verwendungen des tr
Befehl.
Konvertieren Sie Kleinbuchstaben in Großbuchstaben #
Das Umwandeln von Kleinbuchstaben in Großbuchstaben oder umgekehrt ist einer der typischen Anwendungsfälle des tr
Befehl. [:lower:]
entspricht allen Kleinbuchstaben und [:upper:]
entspricht allen Großbuchstaben.
echo 'Linuxize' | tr '[:lower:]' '[:upper:]'
LINUXIZE
Anstelle von Zeichenklassen können Sie auch Bereiche verwenden:
echo 'Linuxize' | tr 'a-z' 'A-Z'
Um Großbuchstaben in Kleinbuchstaben umzuwandeln, tauschen Sie einfach die Plätze der Sätze.
Entferne alle nicht-numerischen Zeichen #
Der folgende Befehl entfernt alle nicht numerischen Zeichen:
echo "my phone is 123-456-7890" | tr -cd [:digit:]
[:digit:]
steht für alle Ziffernzeichen und mit -c
Option entfernt der Befehl alle Zeichen, die keine Ziffern sind. Die Ausgabe sieht folgendermaßen aus:
1234567890
Füge jedes Wort in eine neue Zeile ein #
Um jedes Wort in eine neue Zeile einzufügen, müssen wir alle nicht alphanumerischen Zeichen abgleichen und durch eine neue Zeile ersetzen:
echo 'GNU is an operating system' | tr -cs '[:alnum:]' '\n'
GNU
is
an
operating
system
Leerzeilen entfernen #
Um die Leerzeilen zu löschen, drücken Sie einfach die sich wiederholenden Zeilenumbruchzeichen:
tr -s '\n' < file.txt > new_file.txt
Im obigen Befehl verwenden wir das Umleitungssymbol <
um den Inhalt der file.txt
zu übergeben zum tr
Befehl. Die Umleitung >
schreibt die Ausgabe des Befehls in new_file.txt
.
Drucke $PATH
Verzeichnisse in einer separaten Zeile #
Der $PATH
Umgebungsvariable ist eine durch Doppelpunkte getrennte Liste von Verzeichnissen, die der Shell mitteilt, in welchen Verzeichnissen sie nach ausführbaren Dateien suchen soll, wenn Sie einen Befehl eingeben.
Um jedes Verzeichnis in einer separaten Zeile auszugeben, müssen wir den Doppelpunkt (:
) und ersetzen Sie sie durch die neue Zeile:
echo $PATH | tr ':' '\n'
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
Schlussfolgerung #
tr
ist ein Befehl zum Übersetzen oder Löschen von Zeichen.
Obwohl sehr nützlich, tr
kann nur mit einzelnen Zeichen arbeiten. Für komplexere Mustererkennung und String-Manipulation sollten Sie sed
verwenden oder awk
.
Wenn Sie Fragen oder Feedback haben, können Sie gerne einen Kommentar hinterlassen.