Linux tr-Befehl: Zeichen übersetzen und transformieren

LinuxBeginner
Jetzt üben

Einführung

In diesem Lab werden wir den tr-Befehl in Linux untersuchen, ein vielseitiges Werkzeug zur Texttransformation auf Zeichenebene. Der Name tr steht für „translate“ (übersetzen). Der Befehl wird häufig für Aufgaben wie das Ändern der Groß-/Kleinschreibung, das Entfernen bestimmter Zeichen und die grundlegende Datenbereinigung eingesetzt. Am Ende dieses Labs werden Sie in der Lage sein, tr souverän für verschiedene Szenarien der Textmanipulation anzuwenden. Dieses Lab ist für Anfänger konzipiert. Machen Sie sich also keine Sorgen, wenn Sie neu in der Linux-Welt sind – wir führen Sie Schritt für Schritt durch den Prozess.

Die Grundlagen von tr verstehen

Beginnen wir mit der grundlegenden Syntax des tr-Befehls:

tr [OPTION]... SET1 [SET2]

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

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

Erstellen Sie zuerst die Datei:

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

Tipps: Sie können die Befehle zur Dateierstellung kopieren und im Terminal einfügen, um die Dateien korrekt anzulegen.

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 zu konvertieren:

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

Sie sollten die folgende Ausgabe sehen:

HELLO, WORLD

Lassen Sie uns diesen Befehl zerlegen:

  1. cat ~/project/greeting.txt: Dies liest den Inhalt der Datei.
  2. |: Dies ist das Pipe-Symbol. Es nimmt die Ausgabe des links stehenden Befehls und übergibt sie als Eingabe an den rechts stehenden Befehl.
  3. tr 'a-z' 'A-Z': Dies ist unser tr-Befehl. Er übersetzt jedes Zeichen aus dem ersten Satz ('a-z', was alle Kleinbuchstaben repräsentiert) in das entsprechende Zeichen des zweiten Satzes ('A-Z', was alle Großbuchstaben repräsentiert).

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

Zeichen mit tr löschen

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. Wir erstellen eine Datei mit Satzzeichen und entfernen diese anschließend.

Erstellen Sie zuerst eine Datei mit Satzzeichen:

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

Tipps: Sie können die Befehle zur Dateierstellung kopieren und im Terminal einfügen, um die Dateien korrekt anzulegen.

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 zerlegen:

  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 (delete) weist tr an, die angegebenen Zeichen zu löschen.
    • [:punct:] ist eine Zeichenklasse, die alle Satzzeichen repräsentiert. Zeichenklassen sind vordefinierte Mengen, die es erleichtern, Gruppen von Zeichen anzusprechen.

Dieser Befehl entfernt alle Satzzeichen aus dem Text, sodass nur Buchstaben, Zahlen und Leerzeichen übrig bleiben.

Mehrere Zeichen übersetzen

Lassen Sie uns nun eine komplexere Übersetzung ausprobieren. Wir erstellen eine Datei mit verschlüsseltem Text und verwenden tr, um ihn zu dekodieren. Dieses Beispiel zeigt, wie tr für einfache Verschlüsselung und Entschlüsselung genutzt werden kann.

Erstellen Sie zuerst eine Datei mit kodiertem Text:

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

Tipps: Sie können die Befehle zur Dateierstellung kopieren und im Terminal einfügen, um die Dateien korrekt anzulegen.

Nun dekodieren wir den Text:

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

Sie sollten sehen:

This is a secret message.

Lassen Sie uns diesen Befehl zerlegen:

  1. cat ~/project/encoded.txt: Dies liest den Inhalt der kodierten Datei.
  2. |: Dies leitet die Ausgabe an den tr-Befehl weiter.
  3. tr 'b-za-a' 'a-z':
    • Der erste Satz 'b-za-a' besteht aus:
      • 'b-z': Buchstaben b bis z
      • 'a-a': der Buchstabe a
      • Der vollständige erste Satz ist also: b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a
    • Der zweite Satz 'a-z' ist: a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
    • Dies erzeugt eine Zuordnung, bei der jeder Buchstabe im ersten Satz durch den entsprechenden Buchstaben im zweiten Satz ersetzt wird:
      • b (1. im ersten Satz) → a (1. im zweiten Satz)
      • c (2. im ersten Satz) → b (2. im zweiten Satz)
      • ...
      • a (26. im ersten Satz) → z (26. im zweiten Satz)
    • Dies verschiebt effektiv jeden Buchstaben in der Eingabe um eine Position im Alphabet zurück (Dekodierung einer Cäsar-Chiffre).
    • Hinweis: Der tr-Befehl führt eine zeichenweise Übersetzung durch, daher sind nur Kleinbuchstaben betroffen. Großbuchstaben wie das "T" am Anfang der Nachricht bleiben unverändert, da sie mit keinem Zeichen im ersten Satz übereinstimmen.

Diese Art der Ersetzung ist eine sehr einfache Form der Verschlüsselung, die als Cäsar-Chiffre bekannt ist. Obwohl sie für reale Anwendungen nicht sicher ist, dient sie als hervorragendes Beispiel dafür, wie tr für zeichenbasierte Substitutionen verwendet werden kann.

Verwendung von Zeichenklassen mit tr

Der tr-Befehl unterstützt verschiedene Zeichenklassen, bei denen es sich um vordefinierte Zeichensätze handelt. Diese sind sehr nützlich für komplexere Texttransformationen. Wenden wir diese in einem praktischen Szenario an.

Erstellen Sie zuerst eine Datei mit gemischtem Inhalt:

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

Tipps: Sie können die Befehle zur Dateierstellung kopieren und im Terminal einfügen, um die Dateien korrekt anzulegen.

Nun extrahieren wir nur die Ziffern aus diesem Log-Eintrag:

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

Sie sollten sehen:

12309452023815

Lassen Sie uns diesen Befehl zerlegen:

  1. cat ~/project/log_entry.txt: Dies liest den Inhalt der Log-Datei.
  2. |: Dies leitet die Ausgabe an den tr-Befehl weiter.
  3. tr -cd '[:digit:]':
    • Die Option -c (complement) bildet das Komplement der Menge (bedeutet "alles, was nicht in dieser Menge ist").
    • Die Option -d (delete) 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, um numerische Daten aus gemischtem Text zu extrahieren, was bei der Log-Analyse oder Datenbereinigung hilfreich sein kann.

Wiederholungen zusammenfassen mit tr

Der tr-Befehl kann auch aufeinanderfolgende, identische Zeichen zu einem einzigen Vorkommen „zusammenquetschen“ (squeezing). Dies ist nützlich, um Daten mit unnötigen Wiederholungen zu bereinigen. Wir erstellen eine Datei mit mehrfachen Leerzeichen und säubern diese.

Erstellen Sie zuerst eine Datei mit wiederholten Leerzeichen:

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

Tipps: Sie können die Befehle zur Dateierstellung kopieren und im Terminal einfügen, um die Dateien korrekt anzulegen.

Nun verwenden wir tr, um die wiederholten Leerzeichen zusammenzufassen:

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

Sie sollten sehen:

This is a test with extra spaces.

Lassen Sie uns diesen Befehl zerlegen:

  1. cat ~/project/spaced.txt: Dies liest den Inhalt der Datei mit den zusätzlichen Leerzeichen.
  2. |: Dies leitet die Ausgabe an den tr-Befehl weiter.
  3. tr -s ' ':
    • Die Option -s (squeeze-repeats) fasst aufeinanderfolgende Wiederholungen des angegebenen Zeichens zu einem einzigen Zeichen zusammen.
    • ' ' gibt an, dass wir Leerzeichen zusammenfassen möchten.

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

Zusammenfassung

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

  1. Die Groß-/Kleinschreibung von Text ändert
  2. Bestimmte Zeichen löscht
  3. Mehrere Zeichen übersetzt
  4. Zeichenklassen verwendet
  5. Wiederholte Zeichen zusammenfasst

Der tr-Befehl ist ein mächtiges Werkzeug für die Textmanipulation. Hier sind einige zusätzliche Optionen, die wir nicht im Detail behandelt haben:

  • -c: Bildet das Komplement der Zeichenmenge in SET1 (operiert auf allen Zeichen, die nicht in SET1 enthalten sind).
  • -t: Schneidet SET1 auf die Länge von SET2 zu (truncate).

Für fortgeschrittenere Textverarbeitungsaufgaben können Sie in zukünftigen Labs weitere Befehle wie sed und awk erkunden.