sed: Umlaute in Dateien ersetzen

  1. sheep

    sheep Thread StarterMacUser Mitglied

    Mitglied seit:
    21.03.2005
    Beiträge:
    1.223
    Zustimmungen:
    24
    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...
     
    sheep, 28.11.2006
  2. tigion

    tigionMacUser Mitglied

    Mitglied seit:
    21.06.2006
    Beiträge:
    1.091
    Zustimmungen:
    48
    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
     
    tigion, 28.11.2006
  3. Paelmchen

    PaelmchenMacUser Mitglied

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

    try this ...
     
    Paelmchen, 28.11.2006
  4. oneOeight

    oneOeightMacUser Mitglied

    Mitglied seit:
    23.11.2004
    Beiträge:
    48.168
    Zustimmungen:
    3.887
    guck dir chgrep an...
    damit hab ich mal in einem mysql dump die ganzen latin und utf-16 umlaute in utf-8 umlaute umgebaut...
     
    oneOeight, 28.11.2006
  5. ruerueka

    rueruekaMacUser Mitglied

    Mitglied seit:
    04.04.2004
    Beiträge:
    1.080
    Zustimmungen:
    85
    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.
     
    ruerueka, 28.11.2006
  6. sheep

    sheep Thread StarterMacUser Mitglied

    Mitglied seit:
    21.03.2005
    Beiträge:
    1.223
    Zustimmungen:
    24
    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 :).
     
    sheep, 28.11.2006
  7. sheep

    sheep Thread StarterMacUser Mitglied

    Mitglied seit:
    21.03.2005
    Beiträge:
    1.223
    Zustimmungen:
    24
    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 :).
     
    sheep, 28.11.2006
  8. xlqr

    xlqrMacUser Mitglied

    Mitglied seit:
    08.09.2003
    Beiträge:
    1.942
    Zustimmungen:
    15
    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.
     
    xlqr, 28.11.2006
  9. sheep

    sheep Thread StarterMacUser Mitglied

    Mitglied seit:
    21.03.2005
    Beiträge:
    1.223
    Zustimmungen:
    24
    sheep, 28.11.2006
  10. maceis

    maceisMacUser Mitglied

    Mitglied seit:
    24.09.2003
    Beiträge:
    16.696
    Zustimmungen:
    602
    Wesentlich einfacher wäre es vermutlich gewesen, den Webserver so zu konfigurieren, dass er den Clients das richtige Charset mitteilt :D.
     
    maceis, 28.11.2006
Die Seite wird geladen...
Ähnliche Themen - sed Umlaute Dateien
  1. fantaeiner
    Antworten:
    16
    Aufrufe:
    925
  2. pfannkuchen2001
    Antworten:
    20
    Aufrufe:
    4.178
  3. DarkThoughts
    Antworten:
    6
    Aufrufe:
    1.350
    DarkThoughts
    19.11.2009
  4. Killroy007
    Antworten:
    5
    Aufrufe:
    1.796
    Killroy007
    24.08.2008
  5. tschloss
    Antworten:
    8
    Aufrufe:
    10.735
    tschloss
    03.06.2008