tr-Befehl für mehrere Dateien

Diskutiere tr-Befehl für mehrere Dateien im Linux OS Forum im Bereich Linux/Unix Allgemein; Hallo, vielleicht könnt Ihr mir als Linux-Einsteigerin weiterhelfen: Ich möchte in mehreren Dateien alle carriage returns löschen. Dazu habe...

  1. turalu

    turalu Grünschnabel

    Dabei seit:
    26.02.2008
    Beiträge:
    4
    Zustimmungen:
    0
    Hallo,

    vielleicht könnt Ihr mir als Linux-Einsteigerin weiterhelfen:
    Ich möchte in mehreren Dateien alle carriage returns löschen. Dazu habe ich folgenden Befehl gefunden:

    tr -d '\r' < infile.csv > outfile.csv

    Funktioniert mit einer Datei auch prima. Nun will ich den Befehl aber für alle Dateien eines Verzeichnisses ausführen. Kann mir jemand weiterhelfen?

    Danke schonmal!
    turalu
     
  2. Anzeige

    Anzeige

    Wenn du mehr über Linux erfahren möchtest, dann solltest du dir mal folgende Shellkommandos anschauen.


    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Aqualung, 26.02.2008
    Aqualung

    Aqualung Routinier

    Dabei seit:
    12.02.2008
    Beiträge:
    404
    Zustimmungen:
    0
    So:

    Code:
    for datei in *; do  tr -d '\r' < "$datei".csv > "$datei".csv ; done 
    Gruß Aqualung
     
  4. turalu

    turalu Grünschnabel

    Dabei seit:
    26.02.2008
    Beiträge:
    4
    Zustimmungen:
    0
    Danke für den Tipp. Zuerst kam die Meldung: ...V40.csv.csv: no such file or directory
    Also habe ich das '.csv' weggelassen. Dann kam keine Fehlermeldung, aber die Dateien waren hinterher leer. Das Phänomen habe ich schonmal beobachtet, wenn input-Datei=output-Datei war. Ich vermute also, es würde funktionieren, wenn ich die Dateien erst unter anderem Namen speichere, dann die alten lösche und die neuen umbenenne. Leider ist mir die Syntax von deinem Einzeiler nicht ganz klar, deshalb kann ich das nicht ändern: Was hat das mit dem " und $ auf sich?
    Wäre nett, wenn du mir noch einen Hinweis geben könntest. Evtl. auch in welchem Buch (oder auf welcher Homepage) man sowas nachlesen kann.
    Danke!
    turalu
     
  5. #4 Aqualung, 26.02.2008
    Zuletzt bearbeitet: 26.02.2008
    Aqualung

    Aqualung Routinier

    Dabei seit:
    12.02.2008
    Beiträge:
    404
    Zustimmungen:
    0
    Das hier

    Code:
    for datei in *; do  tr -d '\r' < "$datei".csv > "$datei".csv ; done
    war nicht korrekt. Denn wenn in- und outfile gleich heißen ist das Resultat eine leere Datei :))
    $ bezeichnet den INHALT einer Variablen, hier datei.
    Lieber so:

    Code:
    for datei in *; do  tr -d '\r' < $datei > $datei.new ; done
    Die " brauchst Du nur in dem Fall, dass Deine Dateinamen Leerzeichen enthalten.

    Gruß Aqualung
     
  6. turalu

    turalu Grünschnabel

    Dabei seit:
    26.02.2008
    Beiträge:
    4
    Zustimmungen:
    0
    Es kommt zwar die Meldung '$datei: ambiguous redirect', aber es scheint trotzdem zu funktionieren. Zum Löschen und umbenennen habe ich es folgendermassen erweitert:

    for datei in *.csv ; do rm $datei; done #löschen
    for datei in *.csv.new; do mv $datei ${datei%..new}; done #umbenennen

    Ist wahrscheinlich nicht besonders elegant, aber egal :-)
    Danke Dir, Aqualung!

    turalu
     
  7. #6 Jabo, 26.02.2008
    Zuletzt bearbeitet: 26.02.2008
    Jabo

    Jabo Aufgabe ohne Minister

    Dabei seit:
    12.10.2006
    Beiträge:
    1.322
    Zustimmungen:
    0
    Ort:
    Hamburg
    Hallo,

    geht es um Zeilenumbrüche am Ende einer Zeile, wie sie manchmal bei Datenübertragungen vorkommen? Und wie wäre es mal wieder mit sed dafür?

    Im Verzeichnis mit den Dateien:
    Code:
    sed -i -e 's/\(\r\)//' *.csv
    
    Könnte das schon reichen? Mit -i schreibt man direkt in der Datei herum und die ist danach nicht leer...

    Wenn ich diverse DOS-Dateien in ein Verzeichnis kopiere und diesen Befehl drüber bügel (dann mit *.* natürlich weil nicht .csv ..), sind die \r anschließend überall weg..

    [Edit]
    Das "-e" kann auch weg... also sed -i 's/\(\r\)//' *.csv
     
  8. dizzgo

    dizzgo Lernbereite Riesenratte

    Dabei seit:
    04.08.2005
    Beiträge:
    573
    Zustimmungen:
    0
    Ort:
    /ch/sg///
    Dafür gibts doch auch die Programmen 'dos2unix' und 'unix2dos'.
     
  9. turalu

    turalu Grünschnabel

    Dabei seit:
    26.02.2008
    Beiträge:
    4
    Zustimmungen:
    0
    Hall Jens,

    danke für den Hinweis, der tr-Befehl schien mir einfacher, ich hatte es auch schon mit sed probiert, aber da hatte ich ebenfalls das Problem, dass die Datei leer war, und dass ich nicht wusste, wie ich das für alle dateien eines Verzeichnisses machen kann.

    Wenn ich dich richtig verstanden habe, kann man das Problem mit den leeren Dateien mit der -i-Option beheben, allerdings kommt da bei mir die Meldung:
    'illegal option -- i'
    Weisst du, woher das kommt?
    Ich arbeite vom PC aus über Xwindow auf einer Solaris Maschine.

    Grüße,
    Barbara
     
  10. #9 Aqualung, 26.02.2008
    Aqualung

    Aqualung Routinier

    Dabei seit:
    12.02.2008
    Beiträge:
    404
    Zustimmungen:
    0
    Solaris hat keine GNU-Tools (wie linux), sondern "eigene". Da gibt es feine Unterschiede.

    Gruß Aqualung
     
Thema:

tr-Befehl für mehrere Dateien

Die Seite wird geladen...

tr-Befehl für mehrere Dateien - Ähnliche Themen

  1. End of Life für CoreOS Container Linux verkündet

    End of Life für CoreOS Container Linux verkündet: CoreOS hat offiziell das Ende der Unterstützung für CoreOS Container Linux bekannt gegeben. Der Nachfolger ist Fedora CoreOS. Weiterlesen...
  2. LUG: LinOs Fürstenfeldbruck

    LUG: LinOs Fürstenfeldbruck: Wir sind ein Stammtisch von Linux & OpenSource Freunden, die sich im Regelfall 1x im Monat zusammensetzen und austauschen. 2 weitere Donnerstage...
  3. »Crusader Kings III« im September auch für Linux

    »Crusader Kings III« im September auch für Linux: Mit »Crusader Kings III« hat Paradox Interactive bereits im Herbst des vergangenen Jahres einen Nachfolger des auch unter Linux verfügbaren...
  4. OpenBSD für PowerPC64 in Arbeit

    OpenBSD für PowerPC64 in Arbeit: Das OpenBSD-Projekt hat angekündigt, die Arbeit an einem Port des Systems für die PowerPC64-Architektur aufgenommen zu haben. Wann mit einem...
  5. Call for Proposals für Akademy 2020 gestartet

    Call for Proposals für Akademy 2020 gestartet: Der Aufruf zur Einreichung von Vorträgen für die KDE-Entwicklerkonferenz Akademy 2020 ist gestartet. Weiterlesen...
  1. Diese Seite verwendet Cookies um Inhalte zu personalisieren. Außerdem werden auch Cookies von Diensten Dritter gesetzt. Mit dem weiteren Aufenthalt akzeptierst du diesen Einsatz von Cookies.
    Information ausblenden