Al Bogner schrieb:
Am Mo, 30 Aug 2010 07:54:57 CEST schrieb Martin Blank:
Hallo Martin,
Al Bogner schrieb:
Ich möchte bis ausschließlich U+0370 (hex) bzw. 880 (dezimal) unter UTF-8 alles löschen. tr dürfte das nicht können. Ich habe das probiert:
tr -d '[\0-\879]'
Mit sed komme ich mit der Syntax dazu nicht klar. Wie macht man das mit sed? Andere Lösungen als mit sed sind natürlich auch willkommen.
Sollte nach U+03FF (1023) unerwarteter Weise noch was bleiben, so sollte das optimalerweise auch noch gelöscht werden, wenn das nicht zu rechenaufwendig ist.
Al
Ungetestet: sed -e '/\\U0370/d' für das eine Zeichen, '/\\U0370*/d' bis zum Zeilenende, '/\\U0370/,/$/d' für alle Zeilen ab der ersten Fundstelle. Die Zeile, die das Zeichen enthält, wird dann auch vollständig - inklusiv der Zeichen vom Zeilenanfang bis zur Fundstelle - gelöscht.
IMHO hast du ein ganz wichtiges Kriterium übersehen, nämlich den Bereich "aller Zeichen bis", das mein Hauptproblem in der Syntax ist.
Beispiel:
~> var="SONDERZEICHEN (Άναψε)"
~> echo "$var" | sed -e '/\\U0370/d' SONDERZEICHEN (Άναψε)
~> echo "$var" | sed -e '/\\U0370*/d' SONDERZEICHEN (Άναψε)
~> echo "$var" | sed -e '/\\U0370/,/$/d' SONDERZEICHEN (Άναψε)
Es geht darum, dass Άναψε übrigbleibt, es sollen also nur griechische Zeichen übrig bleiben, _alle_ anderen, und nicht nur ein bestimmtes Zeichen, sollen gelöscht werden.
Diese Zeichen sollen also erhalten bleiben: http://de.wikipedia.org/wiki/Unicode-Block_Griechisch_und_Koptisch U+0370 (880) - U+03FF (1023)
U+0000 (0) - U+036F (879) soll gelöscht werden. http://de.wikipedia.org/wiki/Liste_der_Unicode-Bl%C3%B6cke
Al
echo "SONDERZEICHEN (Άναψε)" | sed -e 's/[^\xce\x86-\xce\xbf]//g' Άναε Es ist anscheinend grundsätzlich möglich, allerdings: Die Zeichen, die erhalten bleiben sollen, bilden keinen geschlossenen Block. Es sind Lücken vorhanden. In diesen Lücken sind u.a. offensichtlich Zeichen, die nicht im Suchmuster vertreten sein dürfen. Das Ersetzen des rechten Intervallgrenzen 'bf' durch 'c0' führt zu einer Fehlermeldung von sed. Dadurch wird es erforderlich, für jeden Block eigene Intervallgrenzen anzugeben. Ggf. kommen auch noch einzelne Zeichen dazu. -- Mit freundlichen Grüßen Martin Blank -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org