Linux tr-Befehl: Zeichenübersetzung

LinuxLinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab werden wir den tr-Befehl in Linux erkunden, ein vielseitiges Werkzeug zur Transformation von Text auf Zeichenebene. Der tr-Befehl, kurz für "translate" (Übersetzen), wird häufig für Aufgaben wie die Umwandlung von Groß- und Kleinschreibung, das Entfernen bestimmter Zeichen und die grundlegende Datenbereinigung verwendet. Am Ende dieses Labs werden Sie in der Lage sein, tr für verschiedene Textmanipulationsszenarien sicher zu nutzen. Dieses Lab ist für Anfänger konzipiert, also keine Sorge, wenn Sie neu in der Welt der Linux-Befehle sind – wir werden Sie Schritt für Schritt begleiten.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/TextProcessingGroup -.-> linux/tr("Character Translating") subgraph Lab Skills linux/echo -.-> lab-219198{{"Linux tr-Befehl: Zeichenübersetzung"}} linux/cat -.-> lab-219198{{"Linux tr-Befehl: Zeichenübersetzung"}} linux/tr -.-> lab-219198{{"Linux tr-Befehl: Zeichenübersetzung"}} end

Grundlagen des tr-Befehls verstehen

Beginnen wir damit, die grundlegende Syntax des tr-Befehls zu verstehen:

tr [OPTION]... SET1 [SET2]

Der tr-Befehl liest Text von der Standardeingabe (stdin), transformiert ihn gemäß den angegebenen Optionen und Zeichensätzen und schreibt das Ergebnis auf die Standardausgabe (stdout).

Beginnen wir mit einem einfachen Beispiel. Wir erstellen eine Datei namens greeting.txt mit einer einfachen Begrüßungsnachricht und verwenden dann tr, um alle Kleinbuchstaben in Großbuchstaben umzuwandeln.

Zuerst erstellen wir die Datei:

echo "hello, world" > ~/project/greeting.txt

Tipp: Sie können die Dateierstellungsbefehle in das Terminal kopieren und einfügen, um die Dateien korrekt zu erstellen.

Dieser Befehl erstellt eine neue Datei namens greeting.txt in Ihrem Projektverzeichnis (~/project/) mit dem Inhalt "hello, world".

Nun verwenden wir tr, um alle Kleinbuchstaben in Großbuchstaben umzuwandeln:

cat ~/project/greeting.txt | tr 'a-z' 'A-Z'

Sie sollten die folgende Ausgabe sehen:

HELLO, WORLD

Lassen Sie uns diesen Befehl analysieren:

  1. cat ~/project/greeting.txt: Dies liest den Inhalt der Datei.
  2. |: Dies ist ein Pipe-Symbol. Es nimmt die Ausgabe des Befehls auf der linken Seite und gibt sie als Eingabe an den Befehl auf der rechten Seite weiter.
  3. tr 'a-z' 'A-Z': Dies ist unser tr-Befehl. Er übersetzt jedes Zeichen im ersten Satz ('a-z', das alle Kleinbuchstaben repräsentiert) in das entsprechende Zeichen im zweiten Satz ('A-Z', das alle Großbuchstaben repräsentiert).

Beachten Sie, dass dieser Befehl die ursprüngliche Datei nicht ändert. Wenn Sie den transformierten Text speichern möchten, müssen Sie die Ausgabe in eine neue Datei umleiten.

Löschen von Zeichen mit tr

Der tr-Befehl kann auch bestimmte Zeichen aus der Eingabe löschen. Dies ist besonders nützlich, wenn Sie Text bereinigen müssen, indem Sie unerwünschte Zeichen entfernen. Erstellen wir zunächst eine Datei mit einigen Satzzeichen und entfernen sie dann.

Zuerst erstellen wir eine Datei mit Satzzeichen:

echo "Hello, World! How are you?" > ~/project/punctuated.txt

Tipp: Sie können die Dateierstellungsbefehle in das Terminal kopieren und einfügen, um die Dateien korrekt zu erstellen.

Nun verwenden wir tr, um alle Satzzeichen zu entfernen:

cat ~/project/punctuated.txt | tr -d '[:punct:]'

Sie sollten sehen:

Hello World How are you

Lassen Sie uns diesen Befehl analysieren:

  1. cat ~/project/punctuated.txt: Dies liest den Inhalt der Datei.
  2. |: Dies leitet die Ausgabe an den tr-Befehl weiter.
  3. tr -d '[:punct:]':
    • Die Option -d teilt tr mit, die angegebenen Zeichen zu löschen.
    • [:punct:] ist eine Zeichenklasse, die alle Satzzeichen repräsentiert. Zeichenklassen sind vordefinierte Zeichenmengen, die es einfacher machen, Zeichengruppen anzugeben.

Dieser Befehl entfernt alle Satzzeichen aus dem Text und lässt nur Buchstaben, Zahlen und Leerzeichen übrig.

Übersetzung mehrerer Zeichen

Jetzt wollen wir eine komplexere Übersetzung erkunden. Wir erstellen eine Datei mit verschlüsseltem Text und verwenden tr, um ihn zu entschlüsseln. Dieses Beispiel zeigt, wie tr für einfache Verschlüsselung und Entschlüsselung verwendet werden kann.

Zuerst erstellen wir eine Datei mit verschlüsseltem Text:

echo "Tijt jt b tfdsfu nfttbhf." > ~/project/encoded.txt

Tipp: Sie können die Dateierstellungsbefehle in das Terminal kopieren und einfügen, um die Dateien korrekt zu erstellen.

Nun entschlüsseln wir ihn:

cat ~/project/encoded.txt | tr 'b-za-a' 'a-z'

Sie sollten sehen:

This is a secret message.

Lassen Sie uns diesen Befehl analysieren:

  1. cat ~/project/encoded.txt: Dies liest den Inhalt der verschlüsselten Datei.
  2. |: Dies leitet die Ausgabe an den tr-Befehl weiter.
  3. tr 'b-za-a' 'a-z':
    • Der erste Satz, 'b-za-a', repräsentiert ein verschobenes Alphabet, bei dem 'b' als 'a', 'c' als 'b' usw. behandelt wird, wobei 'a' auf 'z' zurückspringt.
    • Der zweite Satz, 'a-z', ist das normale Alphabet.
    • Dadurch wird jedes Zeichen in der Eingabe effektiv um eine Position im Alphabet zurückverschoben.

Diese Art der Substitution ist eine sehr einfache Form der Verschlüsselung, die als Caesar-Verschlüsselung (Caesar cipher) bezeichnet wird. Obwohl sie für praktische Anwendungen nicht sicher ist, ist es ein ausgezeichnetes Beispiel dafür, wie tr für zeichenweise Substitution verwendet werden kann.

Verwendung von Zeichenklassen mit tr

Der tr-Befehl unterstützt verschiedene Zeichenklassen, die vordefinierte Zeichenmengen sind. Diese können für komplexere Texttransformationen sehr nützlich sein. Lassen Sie uns einige davon in einem praktischen Szenario verwenden.

Zuerst erstellen wir eine Datei mit gemischtem Inhalt:

echo "User123 logged in at 09:45 AM on 2023-08-15" > ~/project/log_entry.txt

Tipp: Sie können die Dateierstellungsbefehle in das Terminal kopieren und einfügen, um die Dateien korrekt zu erstellen.

Nun extrahieren wir nur die Ziffern aus diesem Protokolleintrag:

cat ~/project/log_entry.txt | tr -cd '[:digit:]'

Sie sollten sehen:

12309452023815

Lassen Sie uns diesen Befehl analysieren:

  1. cat ~/project/log_entry.txt: Dies liest den Inhalt der Protokolldatei.
  2. |: Dies leitet die Ausgabe an den tr-Befehl weiter.
  3. tr -cd '[:digit:]':
    • Die Option -c bildet das Komplement der Zeichenmenge (d.h. "nicht in dieser Menge").
    • Die Option -d löscht die angegebenen Zeichen.
    • [:digit:] ist eine Zeichenklasse, die alle Ziffern (0 - 9) repräsentiert.
    • Zusammen bedeutet -cd '[:digit:]' "lösche alle Zeichen, die keine Ziffern sind".

Dieser Befehl ist nützlich für die Extraktion numerischer Daten aus gemischtem Text, was bei der Protokollanalyse oder Datenbereinigung hilfreich sein kann.

Entfernen von Wiederholungen mit tr

Der tr-Befehl kann auch wiederholte Zeichen auf eine einzelne Instanz "komprimieren". Dies ist nützlich, um Daten mit unnötigen Wiederholungen zu bereinigen. Erstellen wir zunächst eine Datei mit einigen wiederholten Zeichen und bereinigen sie dann.

Zuerst erstellen wir eine Datei mit wiederholten Leerzeichen:

echo "This    is    a    test    with    extra    spaces." > ~/project/spaced.txt

Tipp: Sie können die Dateierstellungsbefehle in das Terminal kopieren und einfügen, um die Dateien korrekt zu erstellen.

Nun verwenden wir tr, um die wiederholten Leerzeichen zu komprimieren:

cat ~/project/spaced.txt | tr -s ' '

Sie sollten sehen:

This is a test with extra spaces.

Lassen Sie uns diesen Befehl analysieren:

  1. cat ~/project/spaced.txt: Dies liest den Inhalt der Datei mit zusätzlichen Leerzeichen.
  2. |: Dies leitet die Ausgabe an den tr-Befehl weiter.
  3. tr -s ' ':
    • Die Option -s komprimiert Wiederholungen des angegebenen Zeichens auf eine einzelne Instanz.
    • ' ' gibt an, dass wir Leerzeichen komprimieren möchten.

Dieser Befehl ist besonders nützlich, wenn Sie mit schlecht formatierten Daten umgehen oder wenn Sie Leerzeichen in einer Textdatei normalisieren müssen.

Zusammenfassung

In diesem Lab haben wir den vielseitigen tr-Befehl in Linux erkundet. Wir haben gelernt, wie man:

  1. Den Textfall (Groß- und Kleinschreibung) umwandelt
  2. Bestimmte Zeichen löscht
  3. Mehrere Zeichen übersetzt
  4. Zeichenklassen verwendet
  5. Wiederholte Zeichen komprimiert

Der tr-Befehl ist ein leistungsstarkes Werkzeug zur Textmanipulation. Hier sind einige zusätzliche Optionen, die wir nicht im Detail behandelt haben:

  • -c: Bildet das Komplement der Zeichenmenge in String1, d. h. es werden alle Zeichen bearbeitet, die nicht in String1 enthalten sind.
  • -t: Kürzt String1 auf die Länge von String2.

Für fortgeschrittenere Textverarbeitungstasks möchten Sie in zukünftigen Labs andere Befehle wie sed und awk erkunden.

Ressourcen