UTF8-Dateien + SED (UnxUtils) + Umlaute = bä
-
Hallo liebe Community,
ich möchte in mehreren XML-Dateien, die im UFT8-Format (ohne Byte Order Mark) vorliegen, unter Windows XP SP2 bestimmte Strings durch andere ersetzen.
Bisher versuche ich es mit einer Batch-Datei, die SED aus den UnixUtils benutzt, versucht. (Für manuelles ersetzen mit Notepad++ oder die Verzeichnis-Funktion von Ultraedit sind es einfach zu viele Strings und ich habe nur eine kaskadierte VNC-Einwahl über ISDN)
Eine Zeile aus der Datei sieht z.B. so aus:for /F %%i IN ('dir /b /s /A:-D D:\test\*.*') do sed -i "s/946753/14623348876/g" %%i
Bei den Zahlen funktioniert es wunderbar, aber bei Namen, in denen Umlaute vorkommen, habe ich Probleme. Ich habe die Batchdatei auch schon mal mit (Notepad++) in UTF-8 geschrieben (um im Rohformat dann die gleichen Char-Werte zu haben) oder direkt mit edit.com ueberarbeitet, damit die Umlaute in der Eingabeaufforderung richtig aussehen. Entweder sind die Umlaute, die beim Ersetzen eingefügt wurden, fehlerhaft oder es werden manche der Strings, die ersetzt werden sollen, nicht erkannt. Auch Codepage 437 oder 65001 haben nicht geholfen.
Ich verstehe nicht, warum entweder cmd nicht einfach die Bytewerte in den Strings normal an sed weitergibt oder sed die irgendwie noch verändert, bevor es ersetzt. Eigentlich müssten die beiden sich gar nicht um den Zeichensatz kümmern, wenn die UTF-8-Geschichten direkt binär in der Batchdatei stehen.Vielen Dank im Voraus
Dobiasd
-
Ha, hab die Sau!
Hab die Batchdatei in normalem Ansi geschrieben und die Umlaute einfach für sed mit den Hex-Werten der UTF-8-Codes escaped.
Also statt
for /F %%i IN ('dir /b /s /A:-D D:\test\*.*') do sed -i "s/Wäh/Hurß/g" %%i
schreib ich
for /F %%i IN ('dir /b /s /A:-D D:\test\*.*') do sed -i "s/W\xc3\x9h/Hur\xc3\x9/g" %%i