Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

tux:tr [2011/03/31 16:16]
127.0.0.1 external edit
tux:tr [2012/02/27 14:18] (aktuell)
wikisysop [tr: Translate Characters -> Syntax und Beispiele]
Zeile 10: Zeile 10:
 Einfaches austauschen. Das Kommando <fc #​008000>​tr '​a'​ '​e'</​fc>​ tauscht das Zeichen a gegen das Zeichen e aus:​\\ ​ Einfaches austauschen. Das Kommando <fc #​008000>​tr '​a'​ '​e'</​fc>​ tauscht das Zeichen a gegen das Zeichen e aus:​\\ ​
  
-<xterm2>$ <fc #​008000>​echo banana | tr '​a'​ '​e'</​fc> ​(cr) +<xterm>$ <fc #​008000>​echo banana | tr '​a'​ '​e'</​fc>​ 
-<fc #800000>​benene</​fc>​ +<fc #0000FF>​benene</​fc></​xterm>
-</xterm2>+
  
 Natürlich kann <fc #​008000>​tr</​fc>​ auch aus Dateien lesen. Das Kommando <fc #​008000>​tr '​a'​ '​e'​ < datei.txt</​fc>​ ersetzt in <fc #​008000>​datei.txt</​fc>​ alle a gegen e und gibt das Ergebnis an der Standardausgabe aus: Natürlich kann <fc #​008000>​tr</​fc>​ auch aus Dateien lesen. Das Kommando <fc #​008000>​tr '​a'​ '​e'​ < datei.txt</​fc>​ ersetzt in <fc #​008000>​datei.txt</​fc>​ alle a gegen e und gibt das Ergebnis an der Standardausgabe aus:
  
-<xterm2>$ <fc #​008000>​cat datei.txt</​fc> ​(cr) +<xterm>$ <fc #​008000>​cat datei.txt</​fc>​
 Hans, Martin, Gustav, Simon, Thomas, Ernst, Annemarie, Sabine, Günter, Johann, Elke, Rainer Hans, Martin, Gustav, Simon, Thomas, Ernst, Annemarie, Sabine, Günter, Johann, Elke, Rainer
-$ <fc #​008000>​tr '​a'​ '​e'​ < datei.txt</​fc> ​(cr)  +$ <fc #​008000>​tr '​a'​ '​e'​ < datei.txt</​fc>​ 
-Hens, Mertin, Gustev, Simon, Thomes, Ernst, Annemerie, Sebine, Günter, Johenn, Elke, Reiner +Hens, Mertin, Gustev, Simon, Thomes, Ernst, Annemerie, Sebine, Günter, Johenn, Elke, Reiner</xterm>
-</xterm2>+
  
 Soll die Ausgabe anstelle der Standardausgabe in eine neue Datei geschrieben werden, leiten wir die Ausgabe in eine neue Datei um. Soll die Ausgabe anstelle der Standardausgabe in eine neue Datei geschrieben werden, leiten wir die Ausgabe in eine neue Datei um.
  
-<xterm2>$ <fc #​008000>​tr '​a'​ '​e'​ < datei.txt > datei_neu.txt</​fc> ​(cr)+<xterm>$ <fc #​008000>​tr '​a'​ '​e'​ < datei.txt > datei_neu.txt</​fc>​
 $ <fc #​008000>​cat datei_neu.txt</​fc>​ (cr)  $ <fc #​008000>​cat datei_neu.txt</​fc>​ (cr) 
-Hens, Mertin, Gustev, Simon, Thomes, Ernst, Annemerie, Sebine, Günter, Johenn, Elke, Reiner +Hens, Mertin, Gustev, Simon, Thomes, Ernst, Annemerie, Sebine, Günter, Johenn, Elke, Reiner</xterm>
-</xterm2>+
  
 Beim Ersetzen von Zeichen sollten Sie beachten, dass in den Argumenten, die Sie übergeben, die Zeichen wie in Feldern angeordnet sind: Jedem Zeichen aus dem ersten Argument wird sein entsprechender Gegenpart aus dem zweiten Argument zugeordnet. So ersetzt <fc #​008000>​tr '​abc'​ '​123'</​fc>​ jeweils "​a"​ durch "​1",​ "​b"​ durch "​2"​ und "​c"​ durch "​3"​. Ist die zweite Zeichenkette kürzer als die erste, füllt tr die Lücke mit dem letzten Zeichen aus der zweiten Zeichenkette auf. Beim Ersetzen von Zeichen sollten Sie beachten, dass in den Argumenten, die Sie übergeben, die Zeichen wie in Feldern angeordnet sind: Jedem Zeichen aus dem ersten Argument wird sein entsprechender Gegenpart aus dem zweiten Argument zugeordnet. So ersetzt <fc #​008000>​tr '​abc'​ '​123'</​fc>​ jeweils "​a"​ durch "​1",​ "​b"​ durch "​2"​ und "​c"​ durch "​3"​. Ist die zweite Zeichenkette kürzer als die erste, füllt tr die Lücke mit dem letzten Zeichen aus der zweiten Zeichenkette auf.
  
-<xterm2>$ <fc #​008000>​tr '​abc'​ '​123'​ < datei.txt</​fc> ​(cr)  +<xterm>$ <fc #​008000>​tr '​abc'​ '​123'​ < datei.txt</​fc>​ 
-H1ns, M1rtin, Gust1v, Simon, Thom1s, Ernst, Annem1rie, S12ine, Günter, Joh1nn, Elke, R1iner +H1ns, M1rtin, Gust1v, Simon, Thom1s, Ernst, Annem1rie, S12ine, Günter, Joh1nn, Elke, R1iner</xterm>
-</xterm2>+
  
 Es lassen sich zB auch alle Kleinbuchstaben gegen Grossbuchstaben tauschen: Es lassen sich zB auch alle Kleinbuchstaben gegen Grossbuchstaben tauschen:
  
-<xterm2>$ <fc #​008000>​tr '​a-z'​ '​A-Z'​ < datei.txt</​fc> ​(cr)  +<xterm>$ <fc #​008000>​tr '​a-z'​ '​A-Z'​ < datei.txt</​fc>​ 
-HANS, MARTIN, GUSTAV, SIMON, THOMAS, ERNST, ANNEMARIE, SABINE, GüNTER, JOHANN, ELKE, RAINER +HANS, MARTIN, GUSTAV, SIMON, THOMAS, ERNST, ANNEMARIE, SABINE, GüNTER, JOHANN, ELKE, RAINER</xterm>
-</xterm2>+
  
 Für Klein- und Grossbuchstaben gibt es auch vordefinierte Zeichenklassen -> [:lower:] und [:upper:] Für Klein- und Grossbuchstaben gibt es auch vordefinierte Zeichenklassen -> [:lower:] und [:upper:]
  
-<xterm2>$ <fc #​008000>​tr [:lower:] [:upper:] < datei.txt</​fc> ​(cr) +<xterm>$ <fc #​008000>​tr [:lower:] [:upper:] < datei.txt</​fc>​ 
-HANS, MARTIN, GUSTAV, SIMON, THOMAS, ERNST, ANNEMARIE, SABINE, GÜNTER, JOHANN, ELKE, RAINER +HANS, MARTIN, GUSTAV, SIMON, THOMAS, ERNST, ANNEMARIE, SABINE, GÜNTER, JOHANN, ELKE, RAINER</xterm>
-</xterm2>+
  
 Mit dem Parameter <fc #​008000>​-d</​fc>​ lassen sich auch gezielt Zeichen löschen. Mit dem Parameter <fc #​008000>​-d</​fc>​ lassen sich auch gezielt Zeichen löschen.
  
-<xterm2>$ <fc #​008000>​tr -d [:lower:] < datei.txt</​fc> ​(cr)  +<xterm>$ <fc #​008000>​tr -d [:lower:] < datei.txt</​fc>​ 
-H, M, G, S, T, E, A, S, G, J, E, R +H, M, G, S, T, E, A, S, G, J, E, R</xterm>
-</xterm2>+
  
 Anders herum können Sie mit dem Parameter -c angeben, was **nicht** gelöscht werden soll. Anders herum können Sie mit dem Parameter -c angeben, was **nicht** gelöscht werden soll.
  
-<xterm2>$ <fc #​008000>​tr -c -d '​A-Z'​ < datei.txt</​fc> ​(cr) +<xterm>$ <fc #​008000>​tr -c -d '​A-Z'​ < datei.txt</​fc>​ 
-HMGSTEASGJER +HMGSTEASGJER</​xterm>
-</xterm2>+
  
 In dem Befehl zuvor wurde alles ausser die Grossbuchstaben entfernt, sogar das UNIX New Line Zeichen wurde bei der Ausgabe entfernt. Dieses können wir mit der Angabe von <fc #​008000>​\n</​fc>​ ebenfalls erhalten. In dem Befehl zuvor wurde alles ausser die Grossbuchstaben entfernt, sogar das UNIX New Line Zeichen wurde bei der Ausgabe entfernt. Dieses können wir mit der Angabe von <fc #​008000>​\n</​fc>​ ebenfalls erhalten.
  
-<xterm2>$ <fc #​008000>​tr -c -d '​A-Z\n'​ < datei.txt</​fc> ​(cr) +<xterm>$ <fc #​008000>​tr -c -d '​A-Z\n'​ < datei.txt</​fc>​ 
-HMGSTEASGJER +HMGSTEASGJER</​xterm>
-</xterm2>+
  
 Und dazu noch das Komma. Und dazu noch das Komma.
  
-<xterm2>$ <fc #​008000>​tr -c -d '​A-Z\n,'​ < datei.txt</​fc> ​(cr) +<xterm>$ <fc #​008000>​tr -c -d '​A-Z\n,'​ < datei.txt</​fc>​ 
-H,​M,​G,​S,​T,​E,​A,​S,​G,​J,​E,​R +H,​M,​G,​S,​T,​E,​A,​S,​G,​J,​E,​R</​xterm>
-</xterm2>+
  
 Und auch noch das Leerzeichen. Und auch noch das Leerzeichen.
  
-<xterm2>$ <fc #​008000>​tr -c -d '​A-Z\n,​ ' < datei.txt</​fc> ​(cr) +<xterm>$ <fc #​008000>​tr -c -d '​A-Z\n,​ ' < datei.txt</​fc>​ 
-H, M, G, S, T, E, A, S, G, J, E, R +H, M, G, S, T, E, A, S, G, J, E, R</xterm>
-</xterm2>+
  
 Bei grossen Komma-separierten Textdateien wird die Ausgabe oft schwierig zu lesen oder schlecht weiter verarbeitbar. Wir können das Komma auch gegen ein New Line Zeichen <fc #​008000>​\n</​fc>​ austauschen. Bei grossen Komma-separierten Textdateien wird die Ausgabe oft schwierig zu lesen oder schlecht weiter verarbeitbar. Wir können das Komma auch gegen ein New Line Zeichen <fc #​008000>​\n</​fc>​ austauschen.
  
-<xterm2>$ <fc #​008000>​tr ','​ '​\n'​ < datei.txt</​fc> ​(cr) +<xterm>$ <fc #​008000>​tr ','​ '​\n'​ < datei.txt</​fc>​
 Hans Hans
  ​Martin  ​Martin
Zeile 91: Zeile 80:
  ​Johann  ​Johann
  Elke  Elke
- ​Rainer + ​Rainer</​xterm>
-</xterm2>+
  
 Jetzt haben wir aber noch das Leerzeichen vor den Namen. Um dieses zusätzlich noch zu entfernen, müssen wir den tr-Befehl mit sich selbst kombinieren. Im ersten Schritt werden die Leerzeichen entfernt und die Ausgabe ohne Leerzeichen wird erneut an tr weitergegeben. Jetzt haben wir aber noch das Leerzeichen vor den Namen. Um dieses zusätzlich noch zu entfernen, müssen wir den tr-Befehl mit sich selbst kombinieren. Im ersten Schritt werden die Leerzeichen entfernt und die Ausgabe ohne Leerzeichen wird erneut an tr weitergegeben.
  
-<xterm2>$ <fc #​008000>​tr -d ' ' < datei.txt | tr ','​ '​\n'</​fc> ​(cr)+<xterm>$ <fc #​008000>​tr -d ' ' < datei.txt | tr ','​ '​\n'</​fc>​
 Hans Hans
 Martin Martin
Zeile 108: Zeile 96:
 Johann Johann
 Elke Elke
-Rainer +Rainer</xterm>
-</xterm2>+
  
 Im Gegensatz zu UNIX, wo in ASCII Textdateien eine neue Zeile nur mit einem Line Feed Zeichen (<fc #​008000>​\n</​fc>​) eingeleitet wird, werden unter Windows neue Zeilen zusätzlich noch mit einem Carriage Return (<fc #​008000>​\r</​fc>​ -> return -> Wagenrücklauf) eingeleitet. Das fürt oft zu Darstellungsproblemen,​ wenn man sich Windows Logdateien in UNIX anschauen möchte. Man kann diesens Return mit tr -d '​\r'​ nun entfernen und in einer neuen Datei abspeichern. Im Gegensatz zu UNIX, wo in ASCII Textdateien eine neue Zeile nur mit einem Line Feed Zeichen (<fc #​008000>​\n</​fc>​) eingeleitet wird, werden unter Windows neue Zeilen zusätzlich noch mit einem Carriage Return (<fc #​008000>​\r</​fc>​ -> return -> Wagenrücklauf) eingeleitet. Das fürt oft zu Darstellungsproblemen,​ wenn man sich Windows Logdateien in UNIX anschauen möchte. Man kann diesens Return mit tr -d '​\r'​ nun entfernen und in einer neuen Datei abspeichern.
  
-<xterm2>$ <fc #​008000>​tr -d '​\r'​ < windows.txt > unix.txt</​fc> ​(cr) +<xterm>$ <fc #​008000>​tr -d '​\r'​ < windows.txt > unix.txt</​fc></​xterm>
-</xterm2>+
  
 **Einschränkungen:​** **Einschränkungen:​**
  
-Man kann zwar mehrere Zeichen durch eines ersetzen, wie zB in <fc #​008000>​tr '​a-z'​ '​1'</​fc>,​ was alle Kleinbuchstaben mit einer 1 ersetzt aber man kann nicht ein Zeichen durch mehrere ersetzen. Der Versuch einen Umlaut durch seine Digraphen (zB ae) zu ersetzen , wie zB im Kommando <fc #​008000>​tr '​ä'​ '​ae'</​fc>,​ scheitert. Hierfür muss man zu anderen Methoden, wie zB der Einsatz von <fc #​008000>​sed</​fc>​, greifen.+Man kann zwar mehrere Zeichen durch eines ersetzen, wie zB in <fc #​008000>​tr '​a-z'​ '​1'</​fc>,​ was alle Kleinbuchstaben mit einer 1 ersetzt aber man kann nicht ein Zeichen durch mehrere ersetzen. Der Versuch einen Umlaut durch seine Digraphen (zB ae) zu ersetzen , wie zB im Kommando <fc #​008000>​tr '​ä'​ '​ae'</​fc>,​ scheitert. Hierfür muss man zu anderen Methoden ​greifen, wie zB zum Einsatz von <fc #​008000>​sed</​fc>​.
  
  --- //pronto 2010/05/27 15:02//  --- //pronto 2010/05/27 15:02//
 {{keywords>​translate characters linux debian osx mac}} {{keywords>​translate characters linux debian osx mac}}
tux/tr.1301580975.txt.gz (35007 views) · Zuletzt geändert: 2011/04/16 22:02 (Externe Bearbeitung)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0