sed: Umlaute in Dateien ersetzen

Diskutiere mit über: sed: Umlaute in Dateien ersetzen im Mac OS X - Unix & Terminal Forum

  1. sheep

    sheep Thread Starter MacUser Mitglied

    Beiträge:
    1.223
    Zustimmungen:
    24
    Registriert 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
    Registriert 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:
    576
    Zustimmungen:
    27
    Registriert seit:
    19.08.2005
    for file in `find . -name *.html`
    do
    ...
    done

    try this ...
     
  4. oneOeight

    oneOeight MacUser Mitglied

    Beiträge:
    46.774
    Zustimmungen:
    3.629
    Registriert 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.001
    Zustimmungen:
    66
    Registriert 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.223
    Zustimmungen:
    24
    Registriert 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.223
    Zustimmungen:
    24
    Registriert 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.943
    Zustimmungen:
    15
    Registriert 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.223
    Zustimmungen:
    24
    Registriert seit:
    21.03.2005
  10. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    Registriert 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...
Ähnliche Themen - sed Umlaute Dateien Forum Datum
awk oder sed Zeile ersetzen? Mac OS X - Unix & Terminal 05.03.2012
Alternative zu sed ohne Regex? Mac OS X - Unix & Terminal 19.11.2009
mit 'sed' Strings in *.plist ersetzen... Mac OS X - Unix & Terminal 22.08.2008
sed: Zeilenumbruch in der Ersetzung schreibt nur \n raus Mac OS X - Unix & Terminal 02.06.2008
[sed:] Ersetzen mit newline Mac OS X - Unix & Terminal 28.11.2005

Diese Seite empfehlen

Benutzerdefinierte Suche