replace script von Sonderzeichen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von berniebert, 09.08.2008.

  1. #1 berniebert, 09.08.2008
    berniebert

    berniebert Grünschnabel

    Dabei seit:
    15.01.2007
    Beiträge:
    9
    Zustimmungen:
    0
    Hallo alle,
    ich möchte in einigen Verzeichnissen auf einem Server Umlaute in allen Dateien ersetzen. Das habe ich mir mit einem Shell Script gedacht und mal ein Script ergoogelt:

    for y in `ls *`;
    do sed "s/BLÖK/BLOEK/g" $y > temp; mv temp $y;
    done

    Leider funktioniert das Script zwar mit Nicht-Sonderzeichen, aber sobald ein Sonderzeichen ersetzt werden soll, passiert gar nichts. Woran liegt das? Und was mache ich falsch?

    Vielen Dank schonmal, Bb
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Wolfgang, 09.08.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Sieh dir mal die Darstellung an, ob deine Locale richtig gesetzt ist.
    Sprich wie sieht das Ö aus, wenn du es mit cat Datei auf der Shell ausgibst.

    Wolfgang
     
  4. #3 berniebert, 09.08.2008
    berniebert

    berniebert Grünschnabel

    Dabei seit:
    15.01.2007
    Beiträge:
    9
    Zustimmungen:
    0
    Wenn ich eine Datei in der SSH-Shell mit cat öffne werden die Umlaute korrekt angezeigt...
    Auf meinem Server läuft Linux, auf meinem Client aber Mac OSX. Falls das wichtig ist?

    :think:
     
  5. #4 bytepool, 09.08.2008
    Zuletzt bearbeitet: 09.08.2008
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    verstehst du das Skript das du oben gepostest hast ueberhaupt?
    Wenn ich dich richtig verstanden habe, hast du dieses Skript hier genommen:

    Code:
    for y in `ls *`; do
    	sed "s/BLÖK/BLOEK/g" $y > temp; 
    	mv temp $y;
    done
    
    und dann erwartet dass er dir in allen Text Dateien in dem Verzeichnis die Umlaute umschreibt? Das kann ja auch nicht funktionieren. Dazu sag ich nur "man sed", bzw. such dir ein schoenes Tutorial zu sed, gibt's genug von.
    Und "for y in `ls *`" wird wohl auch nicht fuer Dateien mit Leerzeichen funktionieren, das laesst sich vermutlich besser mit find in Verbindung mit exec loesen.

    mfg,
    bytepool
     
  6. #5 berniebert, 10.08.2008
    berniebert

    berniebert Grünschnabel

    Dabei seit:
    15.01.2007
    Beiträge:
    9
    Zustimmungen:
    0
    Sorry, da habe ich mich falsch ausgedrückt. Ich möchte mit dem Skript nicht *alle* Umlaute ersetzen, sondern nur die im Skript angegebene Zeichenkette. Z.B. soll das o.g. Skript das Wort "BLÖK" ersetzen durch "BLOEK".

    Mein Verzeichnis enthält Dateien die nach dem Schema 1.xml, 2.xml, etc. benannt sind (also ohne Leerzeichen). In den Dateien steht Text, der auch Leerzeichen enthält.

    Folgendes Skript funktioniert bei mir:

    Code:
    for y in `ls *`; do
    	sed "s/ABC/DEF/g" $y > temp; 
    	mv temp $y;
    done
    Alle Zeichenketten "ABC" werden durch "DEF" ersetzt. Dagegen werden bei diesem Skript die Zeichenketten "BLÖK" nicht ersetzt:

    Code:
    for y in `ls *`; do
    	sed "s/BLÖK/BLOEK/g" $y > temp; 
    	mv temp $y;
    done
    Wie gesagt, ich möchte nicht *alle* Umlaute ersetzen, sondern einige Zeichenketten, die unter Anderem Umlaute enthalten.
     
  7. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  8. #6 bytepool, 10.08.2008
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    verstehe, dann sollte dein Skript eigentlich funktionieren. Aber wahrscheinlich haengt das in der Tat auch vom Zeichensatz ab, wie Wolfgang das ja schon Vorschlug. Was sagt denn "locale"? Und in welchem Zeichensatz sind die xml Dateien kodiert? UTF-8?

    Aber das ist auch ein Thema mit dem ich mich kaum auskenne. Doch wenn ich spekulieren muesste, wuerde ich sagen dass es zu dem Problem kommen kann, wenn die xml Dateien anders kodiert sind als sed das erwartet. Dann kann es theoretisch sein, dass ein "Ö" in einer Datei einen anderen Binaerwert hat, als ein "Ö" in sed, d.h. die beiden "Ö"s wuerden nicht korrekt gematcht. Aber wie gesagt, das ist Spekulation meinerseits, da ich mich noch nie eingehend mit dem Thema beschaeftigt hab.

    mfg,
    bytepool
     
  9. #7 berniebert, 10.08.2008
    berniebert

    berniebert Grünschnabel

    Dabei seit:
    15.01.2007
    Beiträge:
    9
    Zustimmungen:
    0
    Hi Wolfgang und bytepool,
    ups, mir ist es gerade wie Schuppen von den Augen gefallen. Meine Konsole ist zwar UTF-8 und die Dateien auch, aber mein Shellskript habe ich im Texteditor auf dem Mac geschrieben, der als Default MacOS Latin codiert. Wenn ich die .sh Datei also explizit in UTF-8 speichere funktioniert es.

    Danke für Eure Hinweise! Bb
     
Thema:

replace script von Sonderzeichen

Die Seite wird geladen...

replace script von Sonderzeichen - Ähnliche Themen

  1. str_replace

    str_replace: hi Ich will folgende Zeichenfolge in PHP umsetzen aber es funktioniert nicht. Ich denke ich muss da noch einiges Escapen aber was?...
  2. Replace xml values

    Replace xml values: Hallo Zusammen, Ich versuche seit Stunden ein Bash Script zu erstellen aber leider ohne Erfolg. Der Script soll verschiedenen Variablen in...
  3. str_replace()

    str_replace(): Nabend, ich hab mich mal mit str_replacer beschäftig. Hier mein Code: $bad=array("(",")","/","=","$","{","}","[","]",""); $replace="Hallo, du...
  4. Problem mit str_replace

    Problem mit str_replace: Servus Zusammen, ich habe ein Problem mit der Funktion str_replace unter PHP Version 5.2.0 zusammen in der Verwendung in einer Klasse. (Wenn ich...
  5. Text Search&Replace Files/Subdirectories

    Text Search&Replace Files/Subdirectories: Hallo zusammen, Ich möchte einen simplen Search&Replace über knapp 50.000 .html Dateien in verschiedenen Unterverzeichnissen ausführen, dabei...