Bash tr-Befehl: Zeichen suchen, ersetzen und löschen
Syntax und Verwendung des tr-Befehls
Der tr-Befehl in Bash ist ein vielseitiges Tool zur Zeichenmanipulation, mit dem du Zeichen in einem Textstrom suchen, ersetzen oder löschen kannst. Seine Syntax ist wie folgt:
tr [OPTIONEN] SET1 SET2
SET1: Zeichenfolge zu suchen
- SET1 ist eine Zeichenfolge, die die Zeichen angibt, die gesucht werden sollen.
- Du kannst einzelne Zeichen, Zeichenbereiche oder Zeichenklassen verwenden.
SET2: Zeichenfolge zum Ersetzen oder Löschen
- SET2 ist eine Zeichenfolge, die die Zeichen angibt, die als Ersatz für die gefunden Zeichen verwendet werden sollen.
- Wenn SET2 leer ist, werden die gefundenen Zeichen gelöscht.
Optionen
Der tr-Befehl unterstützt verschiedene Optionen zur Anpassung seines Verhaltens:
- -d: Löscht die Zeichen aus SET1 aus der Eingabe, anstatt sie zu ersetzen.
- -s: Komprimiert aufeinanderfolgende Instanzen von Zeichen aus SET1 auf ein einzelnes Auftreten.
- -c: Komplementiert den Suchvorgang und ersetzt alle Zeichen außer denen aus SET1.
- -v: Invertiert den Suchvorgang und ersetzt alle Zeichen aus SET1.
Verwendung
Um den tr-Befehl zu verwenden, gib ihn einfach in der Befehlszeile gefolgt von den entsprechenden SETs und Optionen ein. Beispielsweise sucht und ersetzt der folgende Befehl alle Vorkommen des Zeichens "a" durch "b" in der Datei "input.txt":
tr "a" "b" < input.txt
Du kannst auch reguläre Ausdrücke verwenden, um komplexere Zeichenmanipulationen durchzuführen. Weitere Informationen zu regulären Ausdrücken und ihrer Verwendung mit tr findest du im Abschnitt "Zeichensequenzen und Klassen".
Optionen zur Zeichensubstitution
Um Zeichen innerhalb eines Textes zu ersetzen, bietet der tr
-Befehl dir mehrere Optionen:
Einfache Substitution
Mit der einfachsten Option kannst du ein einzelnes Zeichen durch ein anderes ersetzen. Die Syntax ist wie folgt:
tr "altes_zeichen" "neues_zeichen"
Beispiel:
echo 'Änderungen anwenden' | tr 'ä' 'ae'
Aenderungen anwenden
Bereichssubstitution
Du kannst auch Zeichen innerhalb eines Bereichs durch ein anderes Zeichen ersetzen. Die Syntax ist wie folgt:
tr -s "startzeichen-endzeichen" "ersetzungszeichen"
Beispiel:
echo 'ABCDEFG' | tr -s 'A-C' 'a'
abcDEFG
Einbuchstabensubstitution
Für eine schnellere und einfachere Substitution kannst du Einbuchstabensubstitutionen verwenden. Die Syntax ist wie folgt:
Weitere Einzelheiten findest du in: Teilen von Dateien unter Linux: Der Befehl 'split'
tr -c "alten_zeichen" "ersetzungszeichen"
Diese Option ersetzt alle Zeichen, die nicht in der Zeichenfolge "alten_zeichen" enthalten sind, durch "ersetzungszeichen".
Beispiel:
echo '123abcDEF' | tr -c '0-9' 'X'
X123XabcXFX
Zeichen löschen
Um ein Zeichen aus einem Text zu löschen, kannst du die Option -d
verwenden. Die Syntax ist wie folgt:
tr -d "zu_löschende_zeichen"
Beispiel:
echo 'Hallo Welt' | tr -d ' '
HalloWelt
Verwendung von Bereichswerten
Der tr
-Befehl bietet dir die Möglichkeit, ganze Bereiche von Zeichen durch andere Zeichen zu ersetzen. Dabei hast du die Wahl, ob du den Bereich durch einen Start- und Endpunkt oder durch einen Einzelwert angibst.
Bereich durch Start- und Endpunkt
Um einen Bereich durch seinen Start- und Endpunkt anzugeben, verwendest du folgende Syntax:
tr [OPTIONEN] STARTZEICHEN-ENDZEICHEN ERSATZZEICHEN
Beispiel:
tr [a-z] [A-Z]
Dieser Befehl konvertiert alle Kleinbuchstaben im Bereich a-z
in ihre Großbuchstaben A-Z
.
Bereich durch Einzelwert
Du kannst auch einen Bereich durch einen einzelnen Zeichenwert angeben. In diesem Fall ersetzt der tr
-Befehl alle Vorkommen dieses Zeichens durch das angegebene Ersatzzeichen.
Syntax:
tr [OPTIONEN] ZEICHEN ERSATZZEICHEN
Beispiel:
tr a A
Dieser Befehl ersetzt alle Kleinbuchstaben a
durch Großbuchstaben A
.
Komplementierende Bereiche
Wenn du alle Zeichen ersetzen möchtest, die nicht zu einem bestimmten Bereich gehören, kannst du den -c
-Schalter verwenden.
Syntax:
tr -c [OPTIONEN] STARTZEICHEN-ENDZEICHEN ERSATZZEICHEN
Beispiel:
tr -c a-z A
Dieser Befehl ersetzt alle Zeichen außer Kleinbuchstaben durch den Großbuchstaben A
.
Hinweis für optionale Leerzeichen
Beachte, dass Leerzeichen nach den Bereichs- und Ersatzzeichen optional sind. Du kannst sie verwenden, um die Lesbarkeit zu verbessern, aber sie sind nicht erforderlich.
Weitere Informationen findest du in diesem Artikel: Grep-Befehl in Linux: Eine umfassende Anleitung
Zeichensequenzen und Klassen
Neben der Ersetzung einzelner Zeichen kannst du mit dem tr
-Befehl auch Zeichensequenzen und Klassen ersetzen.
Zeichensequenzen
Eine Zeichensequenz ist eine Folge von zwei oder mehr Zeichen, die als Einheit behandelt werden. Um eine Zeichensequenz zu ersetzen, verwendest du die folgenden Schritte:
- Schließe die Zeichensequenz in eckige Klammern ein.
- Ersetze die Sequenz durch das gewünschte Zeichen.
- Verwende die
-s
-Option, um mehrere aufeinanderfolgende Vorkommen der Zeichensequenz durch ein einzelnes Zeichen zu ersetzen.
Beispiel:
tr -s "[aeiou]" "*" < text.txt
Dieser Befehl ersetzt alle Vokale im Text in der Datei text.txt
durch Sternchen.
Zeichenklassen
Zeichenklassen sind vordefinierte Gruppen von Zeichen, die du bei Ersetzungen verwenden kannst. Die folgenden Zeichenklassen stehen zur Verfügung:
-
[:alnum:]
- Alphabetische und numerische Zeichen -
[:alpha:]
- Alphabetische Zeichen -
[:blank:]
- Leerzeichen und Tabulatoren -
[:cntrl:]
- Steuerzeichen -
[:digit:]
- Ziffern -
[:graph:]
- Grafische Zeichen (nicht Leerzeichen und Steuerzeichen) -
[:lower:]
- Kleinbuchstaben -
[:print:]
- Druckbare Zeichen (nicht Leerzeichen und Steuerzeichen) -
[:punct:]
- Satzzeichen -
[:space:]
- Leerzeichen -
[:upper:]
- Großbuchstaben -
[:xdigit:]
- Hexadezimale Ziffern
Um eine Zeichenklasse zu ersetzen, verwendest du die folgenden Schritte:
- Schließe die Zeichenklasse in eckige Klammern ein.
- Ersetze die Zeichenklasse durch das gewünschte Zeichen.
- Verwende die
-s
-Option, um mehrere aufeinanderfolgende Vorkommen der Zeichenklasse durch ein einzelnes Zeichen zu ersetzen.
Beispiel:
tr -s "[:space:]" "\n" < text.txt
Dieser Befehl wandelt alle Leerzeichen und Tabulatoren im Text in der Datei text.txt
in Zeilenumbrüche um.
Zeichen löschen und entfernen
Mit dem tr
-Befehl kannst du nicht nur Zeichen ersetzen, sondern auch ganz entfernen.
Leere Zeichenfolge als Ersatz
Wenn du ein Leerzeichen oder eine leere Zeichenfolge als Ersatzzeichen angibst, wird das übereinstimmende Zeichen entfernt.
echo "Hallo Welt!" | tr 'a' ''
# Hllo Welt!
Zeichengruppen entfernen
Du kannst Bereichswerte oder Zeichengruppen verwenden, um mehrere Zeichen gleichzeitig zu entfernen.
Erfahre mehr unter: Umfassender Leitfaden zum HTML-Listen-Tag
echo "123abc456def" | tr -d '1-4'
# abc456def
Tipp: Die Option -d
(oder --delete
) ist ein Synonym für das Leerzeichen als Ersatzzeichen.
Mehrere Zeichen entfernen
Du kannst mit dem tr
-Befehl auch mehrere übereinstimmende Zeichen entfernen.
echo "ababab" | tr -s 'a'
# ab
Die Option -s
(oder --squeeze-repeats
) unterdrückt wiederholte Zeichen im Ersetzungsteil.
Umgang mit Mehrfachzeileneingaben
Wenn du mit Textdateien arbeitest, die mehrere Zeilen umfassen, kann die Bearbeitung mit dem Befehl tr
eine Herausforderung darstellen. Glücklicherweise bietet tr
Optionen, die dir dabei helfen, diese Aufgabe zu bewältigen.
Zeilenweise Transformationen
Wenn du eine Transformation Zeile für Zeile anwenden möchtest, kannst du die Option -l
(kleines L) verwenden. Diese Option weist tr
an, jede Zeile der Eingabe separat zu bearbeiten, sodass du beispielsweise eine bestimmte Zeichenfolge in jeder Zeile suchen und ersetzen kannst.
tr -l 'a' 'b' < input.txt > output.txt
Im obigen Befehl wird jeder Buchstabe "a" in der Datei "input.txt" durch "b" ersetzt, und das Ergebnis wird in "output.txt" gespeichert.
Bearbeitung von Blöcken
Um eine Transformation auf einen bestimmten Block von Zeilen anzuwenden, kannst du die Option -d
(kleines D) verwenden. Diese Option ermöglicht es dir, einen Bereich von Zeilen anzugeben, auf den die Transformation angewendet werden soll.
tr -d 2-4 'a' 'b' < input.txt > output.txt
Dieser Befehl ersetzt alle "a" durch "b" in den Zeilen 2 bis 4 der Datei "input.txt".
Verarbeitung langer Zeilen
Wenn du mit Zeilen arbeitest, die länger als die Standardpuffergröße sind, kann es zu Pufferüberläufen kommen. Um dieses Problem zu vermeiden, kannst du die Option -bu
verwenden. Diese Option bewirkt, dass tr
die Puffergröße für die Eingabe erhöht, sodass auch sehr lange Zeilen verarbeitet werden können.
tr -bu 'a' 'b' < long_lines.txt > output.txt
Mit diesem Befehl kannst du lange Zeilen sicher transformieren, ohne dir Gedanken über Pufferüberläufe machen zu müssen.
Für zusätzliche Informationen konsultiere: Umweltvariablen in Linux mit dem Echo-Befehl ausgeben
Behandlung von stdin und stdout
Der tr
-Befehl kann sowohl aus einer Eingabedatei als auch von der Standard-Eingabe (stdin
) lesen und sein Ergebnis entweder an eine Ausgabedatei oder an die Standard-Ausgabe (stdout
) schreiben.
Verwendung von stdin
Wenn du keine Eingabedatei angibst, liest tr
die Eingabe von stdin
. Dies ist nützlich, wenn du die Ausgabe von einem anderen Befehl an tr
weiterleiten möchtest. Beispielsweise kannst du die Ausgabe des cat
-Befehls so transformieren:
cat text.txt | tr 'a-z' 'A-Z'
In diesem Beispiel wird der Inhalt der Datei text.txt
in Großbuchstaben umgewandelt.
Verwendung von stdout
Standardmäßig schreibt tr
seine Ausgabe an stdout
. Du kannst jedoch auch eine Ausgabedatei angeben, indem du das >
-Zeichen verwendest. Beispielsweise kannst du die Ausgabe wie folgt in eine Datei namens transformed.txt
umleiten:
tr 'a-z' 'A-Z' < text.txt > transformed.txt
Beispiel für Mehrfachzeilen
Wenn du mehrzeilige Eingaben verarbeitest, solltest du die Option -s
verwenden, die aufeinanderfolgende Leerzeichen entfernt. Dadurch wird sichergestellt, dass jeder Teil der Eingabe korrekt transformiert wird. Beispielsweise kannst du die folgende mehrzeilige Eingabe transformieren:
this
is
a
test
In das Folgende:
THIS
IS
A
TEST
durch Verwendung des folgenden Befehls:
tr -s 'a-z' 'A-Z'
Fehlerbehandlung und Exit-Codes
Prüfung auf Fehler
Der tr
-Befehl gibt einen Exit-Code zurück, der den Erfolg oder Misserfolg des Befehls anzeigt. Du kannst diesen Exit-Code verwenden, um Fehler in deinen Skripten zu behandeln.
- Exit-Code 0: Der Befehl wurde erfolgreich ausgeführt.
- Exit-Code 1: Syntaxfehler oder ungültige Optionen.
- Exit-Code 2: Fehler beim Öffnen einer Eingabedatei.
- Exit-Code 3: Fehler beim Schreiben in eine Ausgabedatei.
- Exit-Code 4: Ungültige Zeichensubstitution.
- Exit-Code 5: Interne Fehler.
Du kannst den $?
-Parameter verwenden, um den Exit-Code des zuletzt ausgeführten Befehls zu erhalten. Beispiel:
Mehr Informationen findest du hier: HTML-Decoder: Konvertieren Sie HTML-Zeichenentitäten mühelos
if [ $? -ne 0 ]; then
echo "Fehler: Der tr-Befehl wurde nicht erfolgreich ausgeführt."
fi
Behandlung häufiger Fehler
Hier sind einige häufige Fehler bei der Verwendung des tr
-Befehls und Tipps zur Behandlung:
Syntaxfehler
- Überprüfe, ob du den Befehl richtig eingegeben hast und die Syntax korrekt ist.
- Überprüfe die Verwendung von Anführungszeichen und Escape-Zeichen.
Ungültige Optionen
- Stelle sicher, dass du gültige Optionen verwendest und diese korrekt formatiert sind.
- Überprüfe die Dokumentation für eine Liste der gültigen Optionen.
Fehler beim Öffnen/Schreiben von Dateien
- Überprüfe, ob die angegebene Eingabedatei existiert und lesbar ist.
- Überprüfe, ob die angegebene Ausgabedatei beschreibbar ist.
- Verwende die
-f
-Option, um vorhandene Ausgabedateien zu überschreiben.
Ungültige Zeichensubstitution
- Stelle sicher, dass die Zeichensubstitution gültig ist und in der angegebenen Reihenfolge erfolgt.
- Überprüfe, ob du Escape-Zeichen für Sonderzeichen verwendest.
Beispiele für häufige Transformationen
In diesem Abschnitt findest du Beispiele für einige häufig verwendete Transformationen mit dem tr
-Befehl, die dir helfen können, häufige Textaufgaben zu erledigen.
Groß- und Kleinschreibung ändern
Um alle Kleinbuchstaben in einem Text in Großbuchstaben umzuwandeln, kannst du Folgendes verwenden:
echo "kleiner text" | tr [:lower:] [:upper:]
Umgekehrt kannst du alle Großbuchstaben in Kleinbuchstaben umwandeln:
echo "GROSSER TEXT" | tr [:upper:] [:lower:]
Bestimmte Zeichen ersetzen
Du kannst bestimmte Zeichen durch andere ersetzen, indem du die Zeichenoption verwendest. Beispielsweise ersetzt der folgende Befehl alle Leerzeichen (
) durch Unterstriche (_
):
echo "Text mit Leerzeichen" | tr " " "_"
Zeichen entfernen
Um bestimmte Zeichen aus einem Text zu entfernen, kannst du die Option -d
verwenden. Der folgende Befehl entfernt beispielsweise alle Kommas ,
aus dem Text:
echo "Text,mit,Kommas" | tr -d ","
Mehrfachzeilige Eingaben verarbeiten
Wenn du mit mehrzeiligen Eingaben arbeitest, kannst du die Option -s
verwenden, um Zeilenumbrüche zu unterdrücken. Der folgende Befehl ersetzt beispielsweise alle Leerzeichen in einer mehrzeiligen Eingabe durch Unterstriche:
echo "Text mit
Leerzeichen" | tr -s " " "_"
Umwandlung von Groß- und Kleinbuchstaben in einem Bereich
Um Groß- und Kleinbuchstaben in einem bestimmten Bereich zu transformieren, kannst du die Bereichsoption verwenden. Der folgende Befehl wandelt beispielsweise alle Großbuchstaben zwischen A
und E
in Kleinbuchstaben um:
Für mehr Details, lies auch: Die ultimative Anleitung zum Find-Befehl: Suchen und Ersetzen in Linux effizient
echo "ABCDEF" | tr '[:upper:A-E]' '[:lower:a-e]'
Komplexe Transformationen
Du kannst auch komplexere Transformationen durchführen, indem du mehrere Optionen kombinierst. Beispielsweise wandelt der folgende Befehl alle Kleinbuchstaben einer E-Mail-Adresse in Großbuchstaben und ersetzt das @
-Symbol durch einen Unterstrich:
echo "[email protected]" | tr '[:lower:]@[[:upper:]]' '_@'
Verwandte Artikel
- Die Geheimnisse von 'cat' unter Linux entschlüsseln
- Text in HTML umwandeln: Eine Schritt-für-Schritt-Anleitung
- Linux wc: Zeilen, Wörter und Zeichen effektiv zählen
- HTML-Multiline-Kommentare: Versteckte Anmerkungen im Code
- HTML in Text umwandeln: Ein umfassender Leitfaden
- sed replace: Effizientes Textmanipulationswerkzeug für Linux und Unix
- Text zu HTML: Mühelose Konvertierung mit Schritt-für-Schritt-Anleitung
- Linux cut: Manipulieren und Verarbeiten von Textdaten effizient
- xxd: Ein vielseitiges Unix-Tool zum Hexdumping, Decodieren und Konvertieren von Binärdaten
- Das unsichtbare Leerzeichen: Die Macht des
- AWK für Linux: Leistungsstarke Datenmanipulation und Textverarbeitung
- HTML-Kommentare: Der unsichtbare Helfer für eine saubere Codebasis
Neue Posts
World of Warcraft auf Linux spielen: Eine guide für Abenteurer
Einführung in World of Warcraft
Node.js NVM: Antworten auf die häufigsten Fragen
Entwicklung
Professionelle Gmail-HTML-Signaturen: Erstellen, Gestalten und Nutzen
Marketingstrategien
Die vollständige Anleitung zu poczta wp: Alles, was Sie wissen müssen
Sicherheit und Datenschutz
HTML-Content: Der ultimative Leitfaden zur Erstellung ansprechender Webseiten
SEO-Optimierung
Das HTML-Title-Attribut: Ein Leitfaden zur Optimierung von Titeln für SEO und Benutzerfreundlichkeit
Online-Marketing
HTTP-Statuscodes: Ihre Bedeutung und Verwendung im Web
Einführung in HTTP-Statuscodes
Besucherzähler für Websites: Tracking Ihres Website-Traffics für Erfolg
SEO-Optimierung
Beschleunigen Sie die Dateneingabe mit HTML Datalist
Webentwicklung
HTML in PUG konvertieren: Einfach und schnell gemacht
Webentwicklung
Beliebte Posts
SteamCMD: Der umfassende Leitfaden zur Verwaltung von Steam-Servern
Sicherheitsrichtlinien
POST-Anfragen: Erstellen, Senden und Empfangen von Daten im Web
Webentwicklung
LaTeX: Das mächtige Werkzeug für hochwertiges Dokumentenschreiben
Dokumentenerstellung
Wiederherstellung beschädigter Linux-Dateisysteme mit fsck: Ein umfassender Leitfaden
Fehlerbehebung
Die vollständige Anleitung zu poczta wp: Alles, was Sie wissen müssen
Sicherheit und Datenschutz
Gigacube Admin: Zugang zu den erweiterten Einstellungen Ihres Routers
Fehlerbehebung
Linux Mint Themes: Personalisieren Sie Ihren Desktop
Open Source
TCPdump-Beispiele: Paketakquise und Netzwerkdiagnose
Fehlerbehebung
Mounten von ISO-Images unter Linux: Eine Schritt-für-Schritt-Anleitung
Anleitungen
Linux Open File: Anleitung zum Öffnen, Bearbeiten und Löschen von Dateien aus dem Terminal
Open Source