Am Do 13.01.2005 10:30 schrieb Stephan Eickschen
a) das führende + gegen 00 ersetzt WENN vorhanden b) Die Leerzeichen killt WENN vorhanden Zwar nicht bash, sondern wüste sed Skripterei, aber es funkt ;-) ---- snip: test.sh----------------------------------------------- #!/bin/sh
SENDER="+49 621 48293xx" echo $SENDER | sed 's/+/00/' | sed 's/ //g' ---- snap ------------------------------------------------------- ./test.sh 004962148293xx
Danke schonmal. Teilweise funktioniert es schon. Mein Problem ist jetzt noch das ich innerhalb des Skriptes das Ergebnis (nach sed) einer neuen Variable zuweisen muß. Ich habe mal selbst herum probiert leider ohne Erfolg. Ich habe folgendes probiert: #!/bin/sh SENDER="+49 621 48293xx" ABSENDER=$SENDER | sed 's/+/00' | sed 's/ //g' echo $ABSENDER Der formatierte String (mit + und Leerzeichen) kommt also aus einer Variable ($SENDER) und soll umformatiert (mit 00 und ohne Leerzeichen) in die Variable $ABSENDER geschrieben werden. Ist das möglich? Viele Grüße Sven
Sven,
Danke schonmal. Teilweise funktioniert es schon. Mein Problem ist jetzt noch das ich innerhalb des Skriptes das Ergebnis (nach sed) einer neuen Variable zuweisen muß. Ich habe mal selbst herum probiert leider ohne Erfolg.
Ich habe folgendes probiert:
#!/bin/sh SENDER="+49 621 48293xx" ABSENDER=$SENDER | sed 's/+/00' | sed 's/ //g' echo $ABSENDER
Der formatierte String (mit + und Leerzeichen) kommt also aus einer Variable ($SENDER) und soll umformatiert (mit 00 und ohne Leerzeichen) in die Variable $ABSENDER geschrieben werden. Ja. Du hast aber etwas 'vergessen': Die Zeile ABSENDER= muss wie folgt aussehen: ABSENDER=`echo $SENDER | sed 's/+/00' | sed 's/ //g` (beachte das echo und die einschließenden ` ` (backquotes? - jedefalls die hochgestellten Akzenze - die führen dazu, dass die damit umschlossene Befehlsfolge ausgeführt wird, bevor deren Resultat der Variablen zuge- wiesen wird)). Kürzer geht es mit (nur einem sed via): ABSENDER=`echo $SENDER | sed 's/+/00;s/ //g`
Grüße, Stephan -- ------------------------------------------------------------------------ Stephan Eickschen Fon: +49 (0)228 933 999 70 Augustastrasse 89 Fax: +49 (0)228 933 999 71 53173 Bonn Cell: +49 (0)170 54 781 60 Germany Email: eickschen.haenel@t-online.de http://www.eiskultur.de ------------------------------------------------------------------------
Stephan Eickschen, Montag, 17. Januar 2005 13:28:
ABSENDER=`echo $SENDER | sed 's/+/00' | sed 's/ //g`
Stimmt das wirklich so? Muß das nicht eher ABSENDER=`echo $SENDER | sed 's/+/00' | sed 's/ //g'` heißen?
Kürzer geht es mit (nur einem sed via): ABSENDER=`echo $SENDER | sed 's/+/00;s/ //g`
Und fehlt nicht auch hier ein Hochkomma? Hab von sed keine Ahnung, kann aber eine solche Konstruktion in anderem Zusammenhang grad gut brauchen. -- Antworten an lists@feile.net werden in /dev/null archiviert! Bitte ggf. lists... durch mail... ersetzen. Andreas Feile www.feile.net
Andreas,
ABSENDER=`echo $SENDER | sed 's/+/00' | sed 's/ //g`
Stimmt das wirklich so? Muß das nicht eher
ABSENDER=`echo $SENDER | sed 's/+/00' | sed 's/ //g'`
heißen?
Kürzer geht es mit (nur einem sed via): ABSENDER=`echo $SENDER | sed 's/+/00;s/ //g`
Und fehlt nicht auch hier ein Hochkomma? Ja - war etwas zu hektisch beim Tippen und Copy/Paste aus der Shell hat's voll zerrissen... Also: immer schön symetrisch bleiben ;-) Oder - wie ich in einer Signatur gelesen habe - "alles was ein Anfang hat. hat auch ein Ende" (oder so ähnlich. ACHTUNG: ein Strahl hat per definitionem einen Anfang, setzt sich aber ins unendlich fort; siehe http://de.wikipedia.org/wiki/Strahl)
Stephan -- ------------------------------------------------------------------------ Stephan Eickschen Fon: +49 (0)228 933 999 70 Augustastrasse 89 Fax: +49 (0)228 933 999 71 53173 Bonn Cell: +49 (0)170 54 781 60 Germany Email: eickschen.haenel@t-online.de http://www.eiskultur.de ------------------------------------------------------------------------
Stephan Eickschen, Montag, 17. Januar 2005 14:17:
Ja - war etwas zu hektisch beim Tippen und Copy/Paste aus der Shell hat's voll zerrissen... Also: immer schön symetrisch bleiben ;-)
OK, bin beruhigt... Jetzt hätte ich aber noch eine umgekehrte Frage: Wie würde man denn aus einer Telefonnummer der Art 004989123456789 machen: 0049-89-123456789 ? -- Antworten an lists@feile.net werden in /dev/null archiviert! Bitte ggf. lists... durch mail... ersetzen. Andreas Feile www.feile.net
Wie würde man denn aus einer Telefonnummer der Art 004989123456789 machen: 0049-89-123456789
echo 004989123456789 | awk '{printf("%s-%s-%s\n", substr($0,1,4), substr($0,5,2), substr($0,7))}' Im Grunde schon, aber wenn ich jetzt mal weiterdenke, fangen die Probleme an, wenn die Vorwahl nicht zwei-, sondern auch drei- oder mehrstellig ist. Wie man das automatisch unterscheiden kann, weiss ich nicht. Scheint aber möglich zu sein, denn isdnrep wirft zu einer Rufnummer durchaus den richtigen Ort aus...
Grüße, Stephan -- ------------------------------------------------------------------------ Stephan Eickschen Fon: +49 (0)228 933 999 70 Augustastrasse 89 Fax: +49 (0)228 933 999 71 53173 Bonn Cell: +49 (0)170 54 781 60 Germany Email: eickschen.haenel@t-online.de http://www.eiskultur.de ------------------------------------------------------------------------
Stephan Eickschen wrote:
Wie würde man denn aus einer Telefonnummer der Art 004989123456789 machen: 0049-89-123456789
echo 004989123456789 | awk '{printf("%s-%s-%s\n", substr($0,1,4), substr($0,5,2), substr($0,7))}'
Im Grunde schon, aber wenn ich jetzt mal weiterdenke, fangen die Probleme an, wenn die Vorwahl nicht zwei-, sondern auch drei- oder mehrstellig ist. Wie man das automatisch unterscheiden kann, weiss ich nicht.
:-} das wusste ich schon ... ist nur eine "im-Prizip-ja" Antwort... Ein vollständiger Telephonnummern Decoder kommt wohl ohne statische Daten (Prefixes, Vorwahlen etc) nicht aus und dann wirds mit awk ein wenig unleserlich.
Scheint aber möglich zu sein, denn isdnrep wirft zu einer Rufnummer durchaus den richtigen Ort aus...
Siehe auch http://www.isdn4linux.de/cgi-bin/viewcvs.cgi/isdn4k-utils/areacode/areacode.... "Portable library module to search for an area code in a database" Der braucht also auch eine "Datenbank" :-) Gruss, Claus
claus, Montag, 17. Januar 2005 15:05:
:-} das wusste ich schon ... ist nur eine "im-Prizip-ja" : Antwort...
...und damit genau die richtige. Ich brauchte das nämlich nicht für ne Telefonnummer, sondern für die exif-Daten meiner Kamera, und dafür tut die (angepaßte) awk-Sequenz hervorragend. Danke. -- Antworten an lists@feile.net werden in /dev/null archiviert! Bitte ggf. lists... durch mail... ersetzen. Andreas Feile www.feile.net
Am Montag, 17. Januar 2005 15:18 schrieb Andreas Feile:
claus, Montag, 17. Januar 2005 15:05:
:-} das wusste ich schon ... ist nur eine "im-Prizip-ja" : Antwort...
...und damit genau die richtige. Ich brauchte das nämlich nicht für ne Telefonnummer, sondern für die exif-Daten meiner Kamera, und dafür tut die (angepaßte) awk-Sequenz hervorragend.
... wobei awk ein wenig overkill ist. sed tuts hier auch: echo "0049891234567" | sed 's#\([0-9]{4}\)\([0-9]{2}\)\([0-9]*\)#\1-\2-\3#' Sieht nur deshalb etwas verworren aus, weil man die () quoten muss. Die Zahl in der geschweiften Klammer gibt die Anzahl der Wiederholung des vorhergehenden an, [0-9] heißt: ein Zeichen von 0..9. Was zwischen den gequoteten Klammern steht, wird zwischengespeichert und in der Ersetzung mit \1, \2 usw. wieder aufgerufen. Man könnte also auch umsortieren. Und ich hab mal # als Trennzeichen verwendet, um nicht noch eine andere Art von Strichen dazwischen zu mixen ;-) -- Gruß MaxX Hinweis 1: PMs an diese Adresse werden automatisch vernichtet. Hinweis 2: Bitte unbedingt beachten: http://www.suse-etikette.de.vu
Am Montag, 17. Januar 2005 14:51 schrieb Stephan Eickschen:
Wie wÃŒrde man denn aus einer Telefonnummer der Art 004989123456789 machen: 0049-89-123456789
echo 004989123456789 | awk '{printf("%s-%s-%s\n", substr($0,1,4), substr($0,5,2), substr($0,7))}'
Im Grunde schon, aber wenn ich jetzt mal weiterdenke, fangen die Probleme an, wenn die Vorwahl nicht zwei-, sondern auch drei- oder mehrstellig ist. Wie man das automatisch unterscheiden kann, weiss ich nicht. Scheint aber möglich zu sein, denn isdnrep wirft zu einer Rufnummer durchaus den richtigen Ort aus...
Wenn dieses Programm den Ort ausgibt, so hat es eine Zuordnung Vorwahl-Ort. Es ließt die Rufnummer von links, bis sie einen Ort hat und gibt im aus. da brauchen keine Striche für gesetzt zu werden. Eindeutig muß es sein, sonst funktionierte das Telefonieren nicht Bernd
Am Montag, 17. Januar 2005 14:36 schrieb claus:
Hallöchen,
Andreas Feile wrote:
Wie würde man denn aus einer Telefonnummer der Art 004989123456789 machen: 0049-89-123456789
echo 004989123456789 | awk '{printf("%s-%s-%s\n", substr($0,1,4), substr($0,5,2), substr($0,7))}'
wobei hier das Problem ist, wieviele Zeichen hat die Ortsvorwahl, immerhin gibts mindestens 3 bis 5 Stellige (also 2-4 ohne 0) hier könnte man dann die ersten 4 abschneiden und mit einer Vorwahl-Lookupdatei zeichenweise die nächsten bestimmen und den Rest dann als Telefonnummer stehen lassen. Andreas
Am Montag, 17. Januar 2005 14:03 schrieb Andreas Feile:
Stephan Eickschen, Montag, 17. Januar 2005 13:28:
ABSENDER=`echo $SENDER | sed 's/+/00' | sed 's/ //g`
Stimmt das wirklich so? Muà das nicht eher
ABSENDER=`echo $SENDER | sed 's/+/00' | sed 's/ //g'`
heiÃen?
Natürlich
KÃŒrzer geht es mit (nur einem sed via): ABSENDER=`echo $SENDER | sed 's/+/00;s/ //g`
Und fehlt nicht auch hier ein Hochkomma?
Sicherlich
Hab von sed keine Ahnung, kann aber eine solche Konstruktion in anderem Zusammenhang grad gut brauchen.
Da brauchst Du auch von sed keine Ahnung zu haben, da die Hochkommata hier zur Syntax der shell gehören. sed bekommt sie nicht zu Gesicht, weil die shell sie wegnimmt. Wenn ich es hier recht sehe, wird hier lediglich jeweils ein Leerzeichen maskiert, die anderen Zeichen bedürfen keiner Maskierung. Allerdings ist es Sinnvoll, bei sed immer Hochkommata zu verwenden, da zur Syntax von sed viele Zeichen gehören, die in der shell eine besondere Bedeutung haben, da wird zu schnell mal eins übersehen, besonders wenn später etwas verändert wird. Bernd
Hallo, Am Mon, 17 Jan 2005, Stephan Eickschen schrieb:
Ich habe folgendes probiert:
#!/bin/sh SENDER="+49 621 48293xx" ABSENDER=$SENDER | sed 's/+/00' | sed 's/ //g' echo $ABSENDER [..] Kürzer geht es mit (nur einem sed via): ABSENDER=`echo $SENDER | sed 's/+/00;s/ //g`
ABSENDER="`echo \"$SENDER\" | sed 's/^+/00/;s/ //g'`" ^ ^^ ^^ ^ ^ bitteschoen! Dann faellt das einem auch nicht auf die Fuesse, wenn man das Schema (pack die Ausgabe von `echo $Variable | Befehl` in eine Variable) anderweitig verwendet. Beispiel: /tmp/test7 $ ( S="f*"; A=`echo $S | sed 's/f/X/g'`; echo $A; ) Xoo.pdX Xootest.tex *HUCH*? /tmp/test7 $ ls f* foo.pdf footest.tex AH! SO ist's besser: /tmp/test7 $ ( S="f*"; A="`echo \"$S\" | sed 's/f/X/g'`"; echo $A; ) X* Gut Nacht, -dnh --
Yapp, wir hamm uns wieder lieb ;) Pinguine zeigen sich den Schnabel, dann geht dat wieder. Mönsch ist das Langweilig. *poppcornwiederwegräum* [> Thorsten von Plotho-Kettner und Bernd Brodesser in suse-linux]
Am Donnerstag, 20. Januar 2005 01:57 schrieb David Haller:
Hallo,
Am Mon, 17 Jan 2005, Stephan Eickschen schrieb:
Ich habe folgendes probiert:
#!/bin/sh SENDER="+49 621 48293xx" ABSENDER=$SENDER | sed 's/+/00' | sed 's/ //g' echo $ABSENDER
[..]
Kürzer geht es mit (nur einem sed via): ABSENDER=`echo $SENDER | sed 's/+/00;s/ //g`
ABSENDER="`echo \"$SENDER\" | sed 's/^+/00/;s/ //g'`" ^ ^^ ^^ ^ ^ bitteschoen!
Dann faellt das einem auch nicht auf die Fuesse, wenn man das Schema (pack die Ausgabe von `echo $Variable | Befehl` in eine Variable) anderweitig verwendet. Beispiel:
/tmp/test7 $ ( S="f*"; A=`echo $S | sed 's/f/X/g'`; echo $A; ) Xoo.pdX Xootest.tex
*HUCH*?
/tmp/test7 $ ls f* foo.pdf footest.tex
AH! SO ist's besser:
/tmp/test7 $ ( S="f*"; A="`echo \"$S\" | sed 's/f/X/g'`"; echo $A; ) X*
Der Quoting-Man hat wieder zugeschlagen ;-) Aber Recht hat er - wann gewöhne ich mir das auch endlich mal durchgehend an? Schaden kann es nie, aber das Weglassen ist manchmal tödlich. -- Gruß MaxX Hinweis 1: PMs an diese Adresse werden automatisch vernichtet. Hinweis 2: Bitte unbedingt beachten: http://www.suse-etikette.de.vu
participants (8)
-
Andreas Feile
-
Andreas Loesch
-
Bernd Brodeßer
-
claus
-
David Haller
-
Eickschen.Haenel@t-online.de
-
Matthias Houdek
-
Sven Gehr