![](https://seccdn.libravatar.org/avatar/7b33cb1e776e35b87edb8ef09f0c888f.jpg?s=120&d=mm&r=g)
Hallo, Am Wed, 31 Aug 2005, Sven Gehr schrieb:
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:
@@+ @@ +
s/^@@ *+/00/;
2.) Nachdem ein evtl. vorhandenes + Zeichen am Anfang umgesetzt ist sollen alle Zeichen die keine Zahl sind (Leerzeichen, /, - etc.) entfernt werden.
s/[^0-9]//g;
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' ^^ ^ du hast das mit den '+' genau fsalchrum. Und die Klammern fuer die Backreferences muessen escaped werden. Ebenso die '?'. Les bitte mal 'man 7 regex' bzgl. "Basic Regular Expressions", denn diese verwendet sed.
sed 's/^@@ *+/00/;s/[^0-9]\+//g;' $ echo '@@+49621/4829-399@@ @@+49621/4829 399@@ @@+49621 4829/399@@' | sed 's/@@ *+/00/;s/[^0-9]\+//g;' 00496214829399 00496214829399 00496214829399 Falls du als Mustererkennung (welche Zeile bearbeitet werden soll) die '@@' vorne und hinten brauchst, dann nimm eine Adresse zu Hilfe: $ echo 'bla @@+49621/4829-397@@ @@+49621/4829 398@@ fasel +49621-4829399@@' | sed -n '/^@@.*@@$/ { s/^@@ *+/00/; s/[^0-9]\+//g; p; }' 00496214829397 00496214829398 Hier werden also nur die Zeilen bearbeitet (und dann ausgegeben) die mit @@ beginnen _und_ enden. Du solltest aber (je nach dem was du fuer Eingabedaten hast) die Mustererkennung noch restriktiver machen, z.B. statt dem einfachen Test auf /^@@.*@@$/ die erlaubten Zeichen zwischen den '@@' noch eingrenzen, z.B.: /^@@[0-9 \/()+-]\+@@$/ ^^backslash escaped, und in der Adresse kann man nicht andere Zeichen als // verwenden. Das erlaubt zwischen den @@ am Zeilenanfang und -ende nur Zahlen, Leerzeichen (kein Tab!), sowie '/', '(', ')', '+' und '-'. Der - muss entweder als erstes (nicht sinnvoll) oder als letztes Zeichen stehen, da er sonst innerhalb der [] die eine Zeichenklasse definiert einen Bereich kennzeichnet (wie eben z.B. [0-9]). Ausserdem muss mindestens eines dieser Zeichen zwischen den '@@' vorkommen ('\+').
Diese Syntax enthält jedoch noch Fehler und ich bekomm's einfach nicht hin.
RTFM (auch man sed) wegen der grundlegenden Syntaxfehler, die du gemacht hast! (s.o.) -dnh --
Brauchst bloß ein paar Millionen richtig anzulegen, schon bist Du Rentier Das ist es ja eben. Angelegt hab' ich - das letzte mal mit 'nem Paddelboot am Steg - schon sooo viel. Bin jetzt ja auch schon bei meiner 3. Millionen (weil die ersten beiden nichts geworden sind). -- >B. Brodeßer, V. Müller