sed: Umlaute in Dateien ersetzen

Dieses Thema im Forum "Mac OS X - Unix & Terminal" wurde erstellt von sheep, 28.11.2006.

  1. sheep

    sheep Thread Starter MacUser Mitglied

    Beiträge:
    1.221
    Zustimmungen:
    24
    MacUser seit:
    21.03.2005
    Hallo

    Ich möchte gerne mit sed (d.h. eigentlich ist es egal womit, aber dieser Befehl ist der einzige, den ich dafür gefunden habe) in vielen Dateien die Umlaute durch Unicode ersetzen. Nun habe ich das zunächst so probiert:

    find . -name *.html -exec sed -f umlaute.txt {} \;

    und in umlaute.txt steht:

    s/ä/\ä/g
    s/ü/\ü/g
    s/ö/\ö/g
    s/Ä/\Ä/g
    s/Ü/\Ü/g
    s/Ö/\Ö/g

    Soweit funktioniert alles bestens. Nun soll jedoch der Inhalt der jeweiligen Datei sofort mit dem umlautefreien Inhalt ersetzt werden (hier wird einfach der neue Inhalt auf der Konsole ausgegeben) - und da ist das Problem: die Option "-i", die man normalerweise verwenden kann, funktioniert offenbar zusammen mit "-f" nicht. Auch kann ich nicht in umlaute.txt eine weitere Zeile "w {}" anhängen, da {} als Dateiname und nicht als Platzhalter interpretiert wird.

    Ich habe es dann mit einer for-Schleife versucht:

    for file in *.html
    do
    sed -f umlaute $file > tmp.$file
    [ -s tmp.$file ] && mv tmp.$file $file
    done

    aber das ist leider nicht rekursiv, d.h. all die Unterverzeichnisse, in denen die vielen Dateien liegen, werden nicht durchgegangen.


    Kann mir jemand einen Tipp geben? So schwierig kann es doch nicht sein, aber ich komm' echt nicht weiter...
     
  2. tigion

    tigion MacUser Mitglied

    Beiträge:
    1.087
    Zustimmungen:
    48
    MacUser seit:
    21.06.2006
    Du könntest ja noch eine Prüfung einbauen, welche Prüft ob es sich um eine Datei oder einen ORdner handelt. Wenn es ein Ordner ist, entsprechend rekursive das Script dafür öffnen.

    Edit: Paelmchen sein Lösung eliminiert das Problem der recursiven Ordner schon mit dem passenden find aufruf :) ... hab wieder zu kompliziert gedacht
     
    Zuletzt bearbeitet: 28.11.2006
  3. Paelmchen

    Paelmchen MacUser Mitglied

    Beiträge:
    574
    Zustimmungen:
    27
    MacUser seit:
    19.08.2005
    for file in `find . -name *.html`
    do
    ...
    done

    try this ...
     
  4. oneOeight

    oneOeight MacUser Mitglied

    Beiträge:
    47.178
    Zustimmungen:
    3.684
    MacUser seit:
    23.11.2004
    guck dir chgrep an...
    damit hab ich mal in einem mysql dump die ganzen latin und utf-16 umlaute in utf-8 umlaute umgebaut...
     
  5. ruerueka

    ruerueka MacUser Mitglied

    Beiträge:
    1.024
    Zustimmungen:
    70
    MacUser seit:
    04.04.2004
    Als Skript speichern:
    Code:
    find . -name "*.html" | perl -pi -e "s/ä/\ä/g"
    find . -name "*.html" | perl -pi -e "s/ü/\ü/g"
    find . -name "*.html" | perl -pi -e "s/ö/\ö/g"
    find . -name "*.html" | perl -pi -e "s/Ä/\Ä/g"
    find . -name "*.html" | perl -pi -e "s/Ü/\Ü/g"
    find . -name "*.html" | perl -pi -e "s/Ö/\Ö/g"
    
    Hab's nicht getestet, da gerade kein Mac zur Hand.
    Perl muss natürlich installiert sein.
     
  6. sheep

    sheep Thread Starter MacUser Mitglied

    Beiträge:
    1.221
    Zustimmungen:
    24
    MacUser seit:
    21.03.2005
    Das ging ja schnell, vielen Dank schon mal :).

    Ich werde mir eure Vorschläge jetzt einen nach dem anderen genauer ansehen und hoffe, dass irgend etwas davon funktionieren wird :).
     
  7. sheep

    sheep Thread Starter MacUser Mitglied

    Beiträge:
    1.221
    Zustimmungen:
    24
    MacUser seit:
    21.03.2005
    Hmm, das will leider alles nicht so recht klappen :(. Meine Dateien scheinen entweder eine komische Zeichenkonvertierung zu haben, oder es liegt an meinem AJAX, mit dem ich die Dateien in eine Website einbinde.

    Ich gebe das besser auf, bevor ich noch mehr Zeit verbrate und sehe mich nach einer anderen Möglichkeit um.

    Danke jedenfalls :).
     
  8. xlqr

    xlqr MacUser Mitglied

    Beiträge:
    1.942
    Zustimmungen:
    15
    MacUser seit:
    08.09.2003
    hat jetzt zwar nix mit unix zu tun ...
    ich verwende für solche aufgaben textwrangler - hat ein mächtiges, gut konfigurierbares *multi file search and replace* - lässt sich auch in diversen scriptsprachen scripten falls nötig.
     
  9. sheep

    sheep Thread Starter MacUser Mitglied

    Beiträge:
    1.221
    Zustimmungen:
    24
    MacUser seit:
    21.03.2005
  10. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.660
    Zustimmungen:
    596
    MacUser seit:
    24.09.2003
    Wesentlich einfacher wäre es vermutlich gewesen, den Webserver so zu konfigurieren, dass er den Clients das richtige Charset mitteilt :D.
     
    Zuletzt bearbeitet: 28.11.2006
Die Seite wird geladen...

Diese Seite empfehlen