[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

sed - Problem



Hallo zusammen,

ich habe ein Problem mit sed. Die Problemstellung ist wie folgt:

In einem Textfile stehen an einer nicht exakt definierten Position ein
String der mit @@ beginnt und mit @@ endet. Der Teil der zwischen diesen
@@'s steht soll extrahiert werden und unformatiert werden. Beim
umfarmatieren sollen folgende Regeln angewendet werden:

1.) Ein führendes + Zeichen soll durch 00 ersetzt werden. Das soll
lediglich mit einem + Zeichen passieren das ganz am Anfang steht. Tauch
dieses Zeichen innerhalb des Strings nocheinmal auf wird es wie ein
Sonderzeichen behandelt und entfernt (siehe unten). Zu beachten ist. Das
zwichem dem + und den @@-Zeichen die den Anfang markieren durchaus ein
Leerzeichen stehen kann. Die Zeichenkette kann also wie folgt beginnen:

@@+
@@ +

2.) Nachdem ein evtl. vorhandenes + Zeichen am Anfang umgesetzt ist
sollen alle Zeichen die keine Zahl sind (Leerzeichen, /, - etc.)
entfernt werden.

Ich bin nicht unbedingt der sed-Profi. Was ich bisher hinbekommen habe
ist:

sed -r
's/@@\s*?\+([0-9]+)\s*?([0-9]+)[^0-9]*?([0-9]+)\/?([0-9]+)?@@/00\1\2\3\4/g'

Diese Syntax enthält jedoch noch Fehler und ich bekomm's einfach nicht
hin. Das mit @@ gekennzeichnete Ende wird nicht erkannt:

Mache ich ein:

echo @@+49621 4829/399@@bla bla bla|sed ..... erhalte ich:

00496214829399bla bla bla

Selbst wenn ich hinter der 2. @@-Kette keine Zeichen mehr übergebe ibt
es Varianten die nicht funktionieren:

@@+49621/4829-399@@  ->  @@+49621/4829-399@@
@@+49621/4829 399@@  ->  @@+49621/4829 399@@

Kenn sich jemand mit sed aus und kann mir sagen wo mein Fehler ist?

Viele Grüße
Sven



Reply to: