Mailinglist Archive: opensuse-de (1367 mails)

< Previous Next >
Re: sed: Bis Unicode U+0370 (880) alles loeschen
  • From: Martin Blank <blankmrty@xxxxxx>
  • Date: Mon, 30 Aug 2010 14:44:20 +0200
  • Message-id: <4C7BA7A4.5000705@xxxxxx>
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@xxxxxxxxxxxx
Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken
Sie eine Mail an: opensuse-de+help@xxxxxxxxxxxx

< Previous Next >