Scriptfrage: Syntax verkürzen
Mit scmxx -d /dev/ttyS0 --info > hdyinfo imeizeile=`grep IMEI hdyinfo` imei=`echo $imeizeile | cut -f 2 -d' '` frage ich die IMEI-Nr meines Handys ab. Nun möchte ich die Syntax verkürzen Ein echo `scmxx -d /dev/ttyS0 --info` | grep IMEI Liefert nun aber nicht nur wie oben eine Zeile, die etwa so aussieht: IMEI: 1234... sondern den ganzen Absatz, also SIEMENS Model: ME45 Revision: 30 IMEI: 1234... Battery: 40% usw. Ich frage mich nun, ob ich mit der 2. Abfrage gültige für alle diversen Handy-Modelle die IMEI-Nr. korrekt bestimmen kann, da ich nicht sicher sein kann, ob die IMEI-Nr. für cut immer in der selben Spalte steht. Empfiehlt es sich also besser den Umweg über eine Datei zu gehen? Wie frage ich also am besten die IMEI-Nr. möglichst in einer Zeile ab? Ich komme da irgendwie mit dem Quoten nicht klar, wenn ich verkürze. Al
Am Samstag, 25. Oktober 2003 21:40 schrieb Al Bogner:
scmxx -d /dev/ttyS0 --info > hdyinfo imeizeile=`grep IMEI hdyinfo` imei=`echo $imeizeile | cut -f 2 -d' '`
frage ich die IMEI-Nr meines Handys ab.
Nun möchte ich die Syntax verkürzen
Ein echo `scmxx -d /dev/ttyS0 --info` | grep IMEI
Liefert nun aber nicht nur wie oben eine Zeile, die etwa so aussieht: IMEI: 1234...
sondern den ganzen Absatz, also
SIEMENS Model: ME45 Revision: 30 IMEI: 1234... Battery: 40% usw.
Ich frage mich nun, ob ich mit der 2. Abfrage gültige für alle diversen Handy-Modelle die IMEI-Nr. korrekt bestimmen kann, da ich nicht sicher sein kann, ob die IMEI-Nr. für cut immer in der selben Spalte steht. Empfiehlt es sich also besser den Umweg über eine Datei zu gehen?
Wie frage ich also am besten die IMEI-Nr. möglichst in einer Zeile ab? Ich komme da irgendwie mit dem Quoten nicht klar, wenn ich verkürze.
Versuch mal: # echo `scmxx -d /dev/ttyS0 --info` | sed -n 's/.*IMEI: \([^ ]*\) .*/\1/p' -- Andreas
Hallo, Am Sat, 25 Oct 2003, Andreas Winkelmann schrieb:
# echo `scmxx -d /dev/ttyS0 --info` | sed -n 's/.*IMEI: \([^ ]*\) # .*/\1/p'
$ scmxx -d /dev/ttyS0 --info | sed -n 's/.*IMEI: \([^ ]*\).*/\1/p' -dnh -- Und jetzt sei ein lieber Hase und hoppel irgendwohin, wo man knuddelige, fluffige kleine Dinger wie Dich in den Arm nimmt und lieb hat. -- Robin S. Socha in dcoulm
Am Samstag, 25. Oktober 2003 22:50 schrieb Al Bogner:
Versuch mal:
# echo `scmxx -d /dev/ttyS0 --info` | sed -n 's/.*IMEI: \([^ ]*\) .*/\1/p'
Danke, funktioniert! Wie quote ich nun richtig, damit das Ergebnis in einer Variable steht?
VARIABLE=`echo ....` Der Befehl steht in Back-Ticks. -- Andreas
Am Samstag, 25. Oktober 2003 23:04 schrieb Andreas Winkelmann:
Am Samstag, 25. Oktober 2003 22:50 schrieb Al Bogner:
Versuch mal:
# echo `scmxx -d /dev/ttyS0 --info` | sed -n 's/.*IMEI: \([^ ]*\) .*/\1/p'
Danke, funktioniert! Wie quote ich nun richtig, damit das Ergebnis in einer Variable steht?
VARIABLE=`echo ....`
Der Befehl steht in Back-Ticks.
Ich verstehe nur nicht, wie man 2 Befehle "verschachtelt". Also echo `scmxx -d /dev/ttyS0 --info` | sed -n 's/.*IMEI: \([^ ]*\) .*/\1/p' funktioniert. Möchte ich nun das Ergebnis in einer Variable haben, dann müßte ich doch eine Syntax der Art var=`echo ...` haben var =`echo `scmxx -d /dev/ttyS0 --info` | sed -n 's/.*IMEI: \([^ ]*\) .*/\1/p'` bash: command substitution: line 1: syntax error near unexpected token `|' bash: command substitution: line 1: ` | sed -n 's/.*IMEI: \([^ ]*\) .*/\1/p'' bash: var: command not found Das Problem sind also die `, die ich 2x in 1 Befehl verwenden möchte. Al
Hallo, Am Sat, 25 Oct 2003, Al Bogner schrieb:
Am Samstag, 25. Oktober 2003 23:04 schrieb Andreas Winkelmann:
Am Samstag, 25. Oktober 2003 22:50 schrieb Al Bogner:
Versuch mal:
# echo `scmxx -d /dev/ttyS0 --info` | sed -n 's/.*IMEI: \([^ ]*\) .*/\1/p'
Danke, funktioniert! Wie quote ich nun richtig, damit das Ergebnis in einer Variable steht?
VARIABLE=`echo ....`
Der Befehl steht in Back-Ticks.
Ich verstehe nur nicht, wie man 2 Befehle "verschachtelt".
Die inneren `` mit \ quoten: foo="`bla \`blubb\` fasel`"
var =`echo `scmxx -d /dev/ttyS0 --info` | sed -n 's/.*IMEI: \([^ ]*\) .*/\1/p'`
Das ist eh "useless use of echo und ``". var="`scmxx -d /dev/ttyS0 --info | sed -n 's/.*IMEI: \([^ ]*\).*/\1/p'`" -dnh -- Es ist alles eine Sache der Vernunft. aber wer hatt Heut zu Tage schon Zeit für so was? [WoKo in dag°]
Am Sonntag, 26. Oktober 2003 00:16 schrieb David Haller:
Ich verstehe nur nicht, wie man 2 Befehle "verschachtelt".
Die inneren `` mit \ quoten: foo="`bla \`blubb\` fasel`"
var =`echo `scmxx -d /dev/ttyS0 --info` | sed -n 's/.*IMEI: \([^ ]*\) .*/\1/p'`
Das ist eh "useless use of echo und ``".
var="`scmxx -d /dev/ttyS0 --info | sed -n 's/.*IMEI: \([^ ]*\).*/\1/p'`"
Das funktioniert nicht, aber das passt: imei=`echo \`scmxx -d /dev/ttyS0 --info\` | sed -n 's/.*IMEI: \([^ ]*\) .*/\1/p'` Also in diesem Fall doch nicht so ganz "useless". Jetzt wird es aber nochmals ohne Textdatei etwas kompliziert: Die Textdatei sieht so aus: ... Phonebooks: FD, ON, ME, LD, MC, RC, OW, MS, CD, BL, MB, RD, CS SMS storages: MT, SM, ME ... phonebooks=`echo \`scmxx -d /dev/ttyS0 --info\` | grep Phonebooks` bringt aber wieder das gesamte Info: Also in der Art: echo $phonebooks Phone related information: Vendor: SIEMENS Model: S45 Revision: 28 IMEI ... (vcs): 1-50 Phonebooks: FD, ON, ME, LD, MC, RC, OW, MS, CD, BL, MB, RD, CS SMS storages: MT, SM, ME Wie kriege ich nun "FD, ON, ME, LD, MC, RC, OW, MS, CD, BL, MB, RD, CS" in eine Variable? Also alles zwischen "Phonebooks: " und "SMS storages". Hintergrundinfo: Nur wenn die Buchstabenkombination für das Telefonbuch vorhanden ist, wird in dieses Telefonbuch geschrieben. Die Variable wird also später als Bedingung genutzt. Nicht jedes Handy liefert hier alle Möglichkeiten. Al
Am Sonntag, 26. Oktober 2003 02:11 schrieb Al Bogner:
Jetzt wird es aber nochmals ohne Textdatei etwas kompliziert:
Die Textdatei sieht so aus: ... Phonebooks: FD, ON, ME, LD, MC, RC, OW, MS, CD, BL, MB, RD, CS SMS storages: MT, SM, ME ... phonebooks=`echo \`scmxx -d /dev/ttyS0 --info\` | grep Phonebooks` bringt aber wieder das gesamte Info:
Also in der Art: echo $phonebooks Phone related information: Vendor: SIEMENS Model: S45 Revision: 28 IMEI ... (vcs): 1-50 Phonebooks: FD, ON, ME, LD, MC, RC, OW, MS, CD, BL, MB, RD, CS SMS storages: MT, SM, ME
Ich vermute mal das ist ein Zeile.
Wie kriege ich nun "FD, ON, ME, LD, MC, RC, OW, MS, CD, BL, MB, RD, CS" in eine Variable? Also alles zwischen "Phonebooks: " und "SMS storages".
...|sed -n 's/\(.*\)Phonebooks:\([^a-zA-Z]*\)\(.*\) SMS Storages\(.*\)/\3/p'
Hintergrundinfo: Nur wenn die Buchstabenkombination für das Telefonbuch vorhanden ist, wird in dieses Telefonbuch geschrieben. Die Variable wird also später als Bedingung genutzt. Nicht jedes Handy liefert hier alle Möglichkeiten.
-- Andreas
Am Sonntag, 26. Oktober 2003 07:43 schrieb Andreas Winkelmann:
Am Sonntag, 26. Oktober 2003 02:11 schrieb Al Bogner:
Jetzt wird es aber nochmals ohne Textdatei etwas kompliziert:
Die Textdatei sieht so aus: ... Phonebooks: FD, ON, ME, LD, MC, RC, OW, MS, CD, BL, MB, RD, CS SMS storages: MT, SM, ME ... phonebooks=`echo \`scmxx -d /dev/ttyS0 --info\` | grep Phonebooks` bringt aber wieder das gesamte Info:
Also in der Art: echo $phonebooks Phone related information: Vendor: SIEMENS Model: S45 Revision: 28 IMEI ... (vcs): 1-50 Phonebooks: FD, ON, ME, LD, MC, RC, OW, MS, CD, BL, MB, RD, CS SMS storages: MT, SM, ME
Ich vermute mal das ist ein Zeile
Ja, als Variable ist es 1 Zeile, bei Umleitung in 1 Datei gibt es aber Zeilenumbrüche.
Wie kriege ich nun "FD, ON, ME, LD, MC, RC, OW, MS, CD, BL, MB, RD, CS" in eine Variable? Also alles zwischen "Phonebooks: " und "SMS storages".
...|sed -n 's/\(.*\)Phonebooks:\([^a-zA-Z]*\)\(.*\) SMS Storages\(.*\)/\3/p'
PB=`echo \`scmxx -d /dev/ttyS0 --info\` | sed -n 's/\(.*\)Phonebooks:\([^a-zA-Z]*\)\(.*\) SMS Storages\(.*\)/\3/p'` PB ist leer. Al
Am Sonntag, 26. Oktober 2003 11:52 schrieb Al Bogner:
Jetzt wird es aber nochmals ohne Textdatei etwas kompliziert:
Die Textdatei sieht so aus: ... Phonebooks: FD, ON, ME, LD, MC, RC, OW, MS, CD, BL, MB, RD, CS SMS storages: MT, SM, ME ... phonebooks=`echo \`scmxx -d /dev/ttyS0 --info\` | grep Phonebooks` bringt aber wieder das gesamte Info:
Also in der Art: echo $phonebooks Phone related information: Vendor: SIEMENS Model: S45 Revision: 28 IMEI ... (vcs): 1-50 Phonebooks: FD, ON, ME, LD, MC, RC, OW, MS, CD, BL, MB, RD, CS SMS storages: MT, SM, ME
Ich vermute mal das ist ein Zeile
Ja, als Variable ist es 1 Zeile, bei Umleitung in 1 Datei gibt es aber Zeilenumbrüche.
Wie kriege ich nun "FD, ON, ME, LD, MC, RC, OW, MS, CD, BL, MB, RD, CS" in eine Variable? Also alles zwischen "Phonebooks: " und "SMS storages".
...|sed -n 's/\(.*\)Phonebooks:\([^a-zA-Z]*\)\(.*\) SMS Storages\(.*\)/\3/p'
PB=`echo \`scmxx -d /dev/ttyS0 --info\` | sed -n 's/\(.*\)Phonebooks:\([^a-zA-Z]*\)\(.*\) SMS Storages\(.*\)/\3/p'`
PB ist leer.
Dann vermute ich mal, sind es mehrere Zeilen. Das ist aber über Mail nicht zu identifizieren. Schau Dir das doch selber mal in Deiner Shell an. Ausserdem sieht dieses ...echo \`... sehr merkwürdig aus. Was passiert denn, wenn Du nur mal dieses "scmxx -d /dev/ttyS0 --info" von der Shell aufrufst. Denke mal dass das echo da auch nicht unbedingt sein muss. Mein Besipiel basierte auf der Tatsache, dass alles in einer Zeile steht, lass den Teil " SMS Storages..." einfach mal weg. -- Andreas
Am Sonntag, 26. Oktober 2003 12:19 schrieb Andreas Winkelmann:
Dann vermute ich mal, sind es mehrere Zeilen. Das ist aber über Mail nicht zu identifizieren. Schau Dir das doch selber mal in Deiner Shell an. Ausserdem sieht dieses ...echo \`... sehr merkwürdig aus. Was passiert denn, wenn Du nur mal dieses "scmxx -d /dev/ttyS0 --info" von der Shell aufrufst.
Dann sieht es aus wie in der Textdatei, also Zeile für Zeile.
Denke mal dass das echo da auch nicht unbedingt sein muss. Mein Besipiel basierte auf der Tatsache, dass alles in einer Zeile steht, lass den Teil " SMS Storages..." einfach mal weg.
Ich denke mittlerweile, es wird so zu kompliziert. Mit einer temporären Textdatei liest sich auch der Code (für mich) verständlicher. Ich verwende nun scmxx -d /dev/ttyS0 --info > $INFOFILE IMEI=`echo \`grep IMEI $INFOFILE\` | cut -f 2 -d' '` VENDOR=`echo \`grep Vendor $INFOFILE\` | cut -f 2 -d' '` MODEL=`echo \`grep Model $INFOFILE\` | cut -f 2 -d' '` PHONEBOOKS=`grep Phonebooks $INFOFILE` Al
Hallo, Am Sun, 26 Oct 2003, Andreas Winkelmann schrieb:
...|sed -n 's/\(.*\)Phonebooks:\([^a-zA-Z]*\)\(.*\) SMS Storages\(.*\)/\3/p'
Useless use of \(\). Du musst nur einschliessen, was du brauchst: sed -n 's/.*Phonebooks:[^a-zA-Z]*\(.*\) SMS Storages.*/\1/p' -dnh --
Die Zonengrenze ist, äh, war übrigens gerade zwei Kilometer entfernt. "Ist" stimmt schon. Hier in Sachsen haben die Blockparteien die absolute Mehrheit, die Telefone werden abgehört, und brauchbare Dinge gibt es nur für Westgeld. Alles wie früher :-) -- Nils Kassube und Ralf Muschall in dasr
Hallo, Am Sun, 26 Oct 2003, Al Bogner schrieb:
Am Sonntag, 26. Oktober 2003 00:16 schrieb David Haller:
Ich verstehe nur nicht, wie man 2 Befehle "verschachtelt".
Die inneren `` mit \ quoten: foo="`bla \`blubb\` fasel`"
var =`echo `scmxx -d /dev/ttyS0 --info` | sed -n 's/.*IMEI: \([^ ]*\) .*/\1/p'`
Das ist eh "useless use of echo und ``".
var="`scmxx -d /dev/ttyS0 --info | sed -n 's/.*IMEI: \([^ ]*\).*/\1/p'`"
Das funktioniert nicht, aber das passt: imei=`echo \`scmxx -d /dev/ttyS0 --info\` | sed -n 's/.*IMEI: \([^ ]*\) .*/\1/p'`
Haeh? Da kann was nicht stimmen. Du weisst, was 'echo' macht?
phonebooks=`echo \`scmxx -d /dev/ttyS0 --info\` | grep Phonebooks` bringt aber wieder das gesamte Info:
Was sagt denn ein 'scmxx -d /dev/ttyS0 --info | hex'? (bitte nicht alles sondern v.a. die Zeilenumbrueche, z.B. vor "Phonebooks" bis inkl. "SMS".
Wie kriege ich nun "FD, ON, ME, LD, MC, RC, OW, MS, CD, BL, MB, RD, CS" in eine Variable? Also alles zwischen "Phonebooks: " und "SMS storages".
Genau wie die IMEI. Da du offenbar mehrere Teile auslesen willst, solltest du sowieso die Ausgabe in einer Variablen speichern: INFO="`scmxx -d /dev/ttyS0 --info`" IMEI="`echo \"$INFO\" | sed -n 's/.*IMEI: \([0-9]\+\) .*/\1/p'`" PHBK="`echo \"$INFO\" | sed -n 's/.*Phonebooks: \(.*\) SMS.*/\1/p'`" Letzteres nur, falls keine Zeilenumbrueche in $INFO sind, siehe die Ausgabe von echo "INFO='$INFO'" Falls Zeilenumbrueche drin sind: PHBK="`echo \"$INFO\" | sed -n 's/.*Phonebooks: \(.*\)$/\1/p'`" -dnh --
Autobahnen. Du meinst sicherlich die Auffahrten auf die überlangen und unsinnigen Großparkplätze, richtig? -- Uwe Ohse zu Jens Link
Am Sonntag, 26. Oktober 2003 12:49 schrieb David Haller:
Das funktioniert nicht, aber das passt: imei=`echo \`scmxx -d /dev/ttyS0 --info\` | sed -n 's/.*IMEI: \([^ ]*\) .*/\1/p'`
Haeh? Da kann was nicht stimmen. Du weisst, was 'echo' macht?
Ist aber so.
phonebooks=`echo \`scmxx -d /dev/ttyS0 --info\` | grep Phonebooks` bringt aber wieder das gesamte Info:
Was sagt denn ein 'scmxx -d /dev/ttyS0 --info | hex'? (bitte nicht alles sondern v.a. die Zeilenumbrueche, z.B. vor "Phonebooks" bis inkl. "SMS".
0230 0a 76 43 61 6c 20 28 76 63 73 29 3a 09 31 2d 35 .vCal (v cs):.1-5 0240 30 0a 50 68 6f 6e 65 62 6f 6f 6b 73 3a 09 46 44 0.Phoneb ooks:.FD 0250 2c 20 4f 4e 2c 20 4d 45 2c 20 4c 44 2c 20 4d 43 , ON, ME , LD, MC 0260 2c 20 52 43 2c 20 4f 57 2c 20 4d 53 2c 20 43 44 , RC, OW , MS, CD 0270 2c 20 42 4c 2c 20 4d 42 2c 20 52 44 2c 20 43 53 , BL, MB , RD, CS 0280 0a 53 4d 53 20 73 74 6f 72 61 67 65 73 3a 09 4d .SMS sto rages:.M 0290 54 2c 20 53 4d 2c 20 4d 45 0a T, SM, M E.
Da du offenbar mehrere Teile auslesen willst, solltest du sowieso die Ausgabe in einer Variablen speichern:
Ist klar. Ich dachte anfangs, ich brauche nur die IMEI-Nr. Dann wollte ich die Ausgabe etwas verschönern und wollte weitere Dinge abfragen. Wie nebenan bemerkt, ist mir das zu kompliziert geworden und ich habe den Weg über eine Textdatei gewählt. Al
Hallo, Am Sun, 26 Oct 2003, Al Bogner schrieb:
Am Sonntag, 26. Oktober 2003 12:49 schrieb David Haller:
Was sagt denn ein 'scmxx -d /dev/ttyS0 --info | hex'? (bitte nicht alles sondern v.a. die Zeilenumbrueche, z.B. vor "Phonebooks" bis inkl. "SMS".
0230 0a 76 43 61 6c 20 28 76 63 73 29 3a 09 31 2d 35 .vCal (v cs):.1-5 0240 30 0a 50 68 6f 6e 65 62 6f 6f 6b 73 3a 09 46 44 0.Phoneb ooks:.FD 0250 2c 20 4f 4e 2c 20 4d 45 2c 20 4c 44 2c 20 4d 43 , ON, ME , LD, MC 0260 2c 20 52 43 2c 20 4f 57 2c 20 4d 53 2c 20 43 44 , RC, OW , MS, CD 0270 2c 20 42 4c 2c 20 4d 42 2c 20 52 44 2c 20 43 53 , BL, MB , RD, CS 0280 0a 53 4d 53 20 73 74 6f 72 61 67 65 73 3a 09 4d .SMS sto rages:.M 0290 54 2c 20 53 4d 2c 20 4d 45 0a T, SM, M E.
Das sind ganz normale Unix-Zeilenumbrueche, das `scmxx .. | grep ..` bzw. `...|sed ...` muesste genau das erwartete machen. -dnh -- Perl ist der geglückte Versuch, einen braindump direkt ausführbar zu machen. [Lutz Donnerhacke in dasr]
participants (3)
-
Al Bogner
-
Andreas Winkelmann
-
David Haller