tr(1) tr(1)
NAME
tr - Zeichen ersetzen oder löschen (transliterate)
SYNTAX
tr[ -c][ -d][ -s][ --] zeichenkette1[ zeichenkette2]
BESCHREIBUNG
tr liest einen Eingabetext von der Standard-Eingabe, ersetzt oder
löscht einzelne Zeichen und schreibt das Ergebnis auf die Standard-
Ausgabe.
Zeichen ersetzten
Wenn Sie mit tr Zeichen ersetzen wollen, müssen Sie beide Zeichenket-
ten definieren. Die Option -d darf nicht angegeben werden.
tr ersetzt im Eingabetext jedes Zeichen, das in zeichenkette1 vor-
kommt, durch das entsprechende Zeichen in zeichenkette2: Das i-te Zei-
chen in zeichenkette1 wird im Eingabetext ersetzt durch das i-te Zei-
chen in zeichenkette2. Ist zeichenkette2 kürzer als zeichenkette1,
dann werden die Zeichen aus zeichenkette1, zu denen es kein entspre-
chendes Zeichen in zeichenkette2 gibt, nicht ersetzt (siehe Beispiel
1).
Zeichen löschen
tr löscht Zeichen, wenn Sie die Option -d (beliebige Zeichen) oder die
Option -s (nur mehrfach vorkommende Zeichen) angeben.
-d berücksichtigt alle Zeichen aus zeichenkette1. -s arbeitet mit der
ersten oder mit der zweiten Zeichenkette, abhängig davon, ob gleich-
zeitig die Option -d angegeben ist.
OPTIONEN
-c (c - complement) zeichenkette1 wird bezüglich des aktuell gülti-
gen Zeichensatzes (mit oktalen Werten 001 bis 377) komplemen-
tiert. Die komplementierte zeichenkette1 enthält dann alle Zei-
chen des aktuell gültigen Zeichensatzes außer den in der
ursprünglichen zeichenkette1 angegebenen Zeichen.
-c wird von tr immer als erstes ausgeführt. Anschließend ersetzt
tr im Eingabetext das i-te Zeichen in der komplementierten
zeichenkette1 durch das i-te Zeichen in zeichenkette2 oder löscht
die Zeichen, die in der komplementierten Zeichenkette vorkommen.
-d (d - delete) Alle Eingabezeichen, die in zeichenkette1 vorkommen,
werden gelöscht.
Zusammen mit Option -c: Alle Eingabezeichen, die in der komple-
mentierten Zeichenkette zeichenkette1 vorkommen, werden gelöscht.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
tr(1) tr(1)
Zusammen mit Option -s: Nach dem Löschvorgang wird in der Ausgabe
jede Folge von gleichen Zeichen, die in zeichenkette2 vorkommen,
zu einem Zeichen verkürzt. Ist -s nicht angegeben, wird zeichen-
kette2 ignoriert. Ist zeichenkette2 nicht angegeben, wird -s
ignoriert.
-s (s - squeeze) tr verkürzt in der Ausgabe jede Folge von gleichen
Zeichen, die in zeichenkette1 bzw. zeichenkette2 vorkommen, zu
einem Zeichen (siehe Beispiel 3). zeichenkette2 wird von -s nur
dann verwendet, wenn gleichzeitig die Option -d angegeben ist.
zeichenkette1 [zeichenkette2]
In zeichenkette1 geben Sie die Zeichen an, die ersetzt bzw.
gelöscht werden sollen. zeichenkette2 ist die Ersetzungszeichen-
kette (außer wenn -d und -s zusammen angegeben sind).
In beiden Zeichenketten müssen Sie die Zeichen ohne Leer- oder
sonstige Trennzeichen aneinanderreihen.
Enthält eine Zeichenkette Zeichen, die für die Shell eine beson-
dere Bedeutung haben, müssen Sie die Zeichenkette in Hochkommas
'...' einschließen oder die Zeichen mit einem vorangestellten
Gegenschrägstrich \ entwerten.
Die Zeichenketten können folgende Angaben enthalten:
zeichen
beliebiges druckbares zeichen.
\oktalzahl
wobei oktalzahl eine ein-, zwei- oder dreistellige Oktalzahl
ist. Den Gegenschrägstrich müssen Sie entwerten, damit die
Ziffern als Oktalzahl erkannt werden.
tr bearbeitet auch das Zeichen NUL (\000). Achtung: In frü-
heren Versionen wurde das Zeichen NUL als Eingabezeichen
stets gelöscht.
sonderzeichen
als Escape-Sequenzen wie beim Kommando printf. Folgende
Escape-Sequenzen können Sie angeben:
\\ Backslash (zur Unterscheidung von Oktalzahlen)
\a Warnung, Klingel
\b Backspace
\f Form Feed, Seitenvorschub
\n New Line, Zeilenumbruch
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
tr(1) tr(1)
\r Carriage Return, Wagenrücklauf
\t Tabulator
\v Vertikal-Tabulator
a-z oder [a-z]
steht für die Folge der Zeichen von a bis z einschließlich.
Die Zeichen sind gemäß der aktuell gültigen Sortierreihen-
folge geordnet. Im Unterschied zu internationalisierten
regulären Ausdrücken dürfen a und z nur einfache Zeichen,
d. h. keine Ausdrücke für Äquivalenzklassen [=c=] oder
Zeicheneinheits-Symbole [.cc.] sein.
[:klasse:]
klasse gibt eine Zeichenklasse an, ähnlich wie bei interna-
tionalen regulären Ausdrücken. Folgende Werte für klasse
sind möglich:
alnum, alpha, blank, cntrl, digit, graph, lower, print,
punct, space, upper, xdigit.
Zeichenklassen dürfen nicht in einer Ersetzungszeichenkette
angegeben werden. Ausnahme: Die Klassen lower und upper sind
zulässig, wenn in zeichenkette1 an derselben Stelle die kor-
respondierende Zeichenklasse angegeben ist.
[=äquivalenz=]
äquvalenz gibt eine Äquivalenzklasse an, ähnlich wie bei
internationalen regulären Ausdrücken.
Äquivalenzklassen dürfen nicht in einer Ersetzungszeichen-
kette angegeben werden.
[a*n]
steht für n-mal das Zeichen a. Z. B. [a*3] steht für aaa.
Die Angabe ist nur in einer Ersetzungszeichenkette sinnvoll.
Ist die erste Ziffer von n 0, so wird n als Oktalzahl inter-
pretiert, andernfalls als Dezimalzahl.
Wenn n fehlt oder 0 ist, dann steht der Ausdruck für so
viele Wiederholungen des Zeichens a, wie nötig sind, um
zeichenkette2 auf die Länge von zeichenkette1 aufzufüllen
(siehe Beispiel 1).
zeichenkette2 nicht angegeben:
Für zeichenkette2 wird die (eventuell komplementierte, siehe -c)
zeichenkette1 genommen.
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
tr(1) tr(1)
INTERNATIONALE UMGEBUNG
Die Umgebungsvariable LCMESSAGES bestimmt die Sprache der Meldungs-
texte.
In geklammerten Ausdrücken bestimmt die Umgebungsvariable LCCOLLATE
die Bedeutung von Zeichenbereichen (z. B. [a-z]). LCCTYPE bestimmt,
welche Zeichen bei Verwendung der Option -c in der aktuell gültigen
Zeichenmenge enthalten sind.
Wenn LCMESSAGES, LCCOLLATE oder LCCTYPE nicht oder als leere Zei-
chenkette definiert ist, wird der Wert von LANG als Standardwert für
die jeweils nicht gesetzte oder leere Variable herangezogen. Ist auch
LANG nicht oder als leere Zeichenkette definiert, verhält sich das
System so, als wäre es nicht internationalisiert.
Die Umgebungsvariable LCALL bestimmt die gesamte internationale Umge-
bung. LCALL hat Vorrang vor allen anderen Umgebungsvariablen im
Bereich der Internationalisierung.
Hat eine der Variablen für die internationale Umgebung einen ungülti-
gen Wert, verhält sich das System so, als wäre keine Variable gesetzt.
BEISPIELE
Beispiel 1
tr ohne Option - einfache Beispiele, die die Wirkungsweise von tr zei-
gen
$ cat tage
Montag Dienstag Mittwoch Donnerstag Freitag Samstag Sonntag
$ tr MD md <tage
montag dienstag mittwoch donnerstag Freitag Samstag Sonntag
tr ersetzt alle M durch m und alle D durch d.
$ tr MDF md <tage
montag dienstag mittwoch donnerstag Freitag Samstag Sonntag
Hier ist die zweite Zeichenkette kürzer als die erste. tr ersetzt alle
M durch m und alle D durch d, das F bleibt jedoch unverändert.
Nun soll jeder Kleinbuchstabe durch x ersetzt werden. Der folgende
Aufruf leistet das Gewünschte nicht:
$ tr '[a-z]' x <tage
Montxg Dienstxg Mittwoch Donnerstxg Freitxg Sxmstxg Sonntxg
Hier ersetzt tr nur das a durch x. Sollen alle Kleinbuchstaben ersetzt
werden, dann muß man tr folgendermaßen aufrufen:
$ tr '[a-z]' '[x*]' <tage
Mxxxxx Dxxxxxxx Mxxxxxxx Dxxxxxxxxx Fxxxxxx Sxxxxxx Sxxxxxx
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
tr(1) tr(1)
Hier gehört zu jedem Zeichen in zeichenkette1 ein x in zeichenkette2,
da durch den Stern * die zeichenkette2 mit x aufgefüllt wird. Die
Hochkommas sind notwendig, da die Zeichenketten Shell-Sonderzeichen
enthalten.
Beispiel 2
Nichtdruckbares Zeichen aus einer Datei löschen (tr -d):
$ tr -d '\016' <datei
tr löscht aus der Datei das Zeichen, dessen Code oktal den Wert 016
hat, und gibt das Ergebnis auf die Standard-Ausgabe aus.
Beispiel 3
Es soll eine Liste aller Wörter, die in der Datei text vorkommen,
erstellt werden, wobei jedes Wort auf einer eigenen Zeile steht. Ein
Wort sei eine Zeichenkette, die nur aus Buchstaben besteht.
$ cat text
"An der Liebe Niederlagen
laesst der Dichter Lieder nagen."
$ tr -cs '[:alpha:]' '[\n*]' <text
An
der
Liebe
Niederlagen
laesst
der
Dichter
Lieder
nagen
SIEHE AUCH
ed(1), sed(1), sh(1).
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98