hallo1
ich möchte aus RX bytes:495024 (483.4 Kb) TX bytes:29893 (29.1 Kb)
gerne nur die anzahl der bytes (jeweils rx und tx separat) als teilzeichenkette extrahieren. hat jemand einen tipp wie das geht? mit "expr" läßt sich das wohl nicht machen.
teilzeichenkette extrahieren
Re: teilzeichenkette extrahieren
Aber selbstverfreilich geht das auch mit expr!
RX:<pre>expr "RX bytes:495024 (483.4 Kb) TX bytes:29893 (29.1 Kb)" : 'RX bytes:\<!--no-->([<!--no-->0-9]*\<!--no-->)'</pre>
TX:<pre>expr "RX bytes:495024 (483.4 Kb) TX bytes:29893 (29.1 Kb)" : '.*TX bytes:\<!--no-->([<!--no-->0-9]*\<!--no-->)'</pre>
Anstelle der konstanten Zeichenkette müsstest Du natürlich eine Variable setzen, die den entsprechenden Inhalt hat.
Jochen
RX:<pre>expr "RX bytes:495024 (483.4 Kb) TX bytes:29893 (29.1 Kb)" : 'RX bytes:\<!--no-->([<!--no-->0-9]*\<!--no-->)'</pre>
TX:<pre>expr "RX bytes:495024 (483.4 Kb) TX bytes:29893 (29.1 Kb)" : '.*TX bytes:\<!--no-->([<!--no-->0-9]*\<!--no-->)'</pre>
Anstelle der konstanten Zeichenkette müsstest Du natürlich eine Variable setzen, die den entsprechenden Inhalt hat.
Jochen
Re: teilzeichenkette extrahieren
danke mit dem festen string geht es aber mit
STR=$(ifconfig eth0|grep "TX bytes:")
RXTRAFFIC=$(expr $STR : 'RX bytes:\([0-9]*\)')
wirft er mir ein
expr: Syntaxfehler
an den kopf. die variable ist mit $STR aber doch eigentlich korrekt?
STR=$(ifconfig eth0|grep "TX bytes:")
RXTRAFFIC=$(expr $STR : 'RX bytes:\([0-9]*\)')
wirft er mir ein
expr: Syntaxfehler
an den kopf. die variable ist mit $STR aber doch eigentlich korrekt?
Re: teilzeichenkette extrahieren
Nö, der Fehler ist so eigentlich vorhersehbar. Die Anführungszeichen um meine feste Zeichenkette stehen da nicht um der Shell zu sagen, das es sich hier um eine Zeichenkettenkonstante handelt, sondern um ihr zu sagen, dass die Zeichenkette als eine einzelne Zeichenkette zu interpretieren ist. Ansonsten zerlegt die Shell diese Zeichenkette anhand Blanks, Tabs und Newlines in einzelne Felder, die dann als einzelne Argumente weiter an expr gegeben werden.
Wenn Du nun in STR eine Zeichenkette mit Blanks drin stehe hast, dann setzt die Shell für $STR dort die Zeichenkette ein und bricht diese wiederum in einzelne Felder auf. Also musst Du um $STR die Anführungszeichen schreiben:<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">RXTRAFFIC=$(expr <b>"</b>$STR<b>"</b> : 'RX bytes:\([0-9]*\)')</font><hr></pre></blockquote>Und schon funktioniert's.
Schau mal in der bash-Manualpage unter dem Thema "Quoting" nach, da findest Du alles exakt erklärt.
Jochen
Wenn Du nun in STR eine Zeichenkette mit Blanks drin stehe hast, dann setzt die Shell für $STR dort die Zeichenkette ein und bricht diese wiederum in einzelne Felder auf. Also musst Du um $STR die Anführungszeichen schreiben:<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">RXTRAFFIC=$(expr <b>"</b>$STR<b>"</b> : 'RX bytes:\([0-9]*\)')</font><hr></pre></blockquote>Und schon funktioniert's.
Schau mal in der bash-Manualpage unter dem Thema "Quoting" nach, da findest Du alles exakt erklärt.
Jochen
Re: teilzeichenkette extrahieren
Danke <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle"> Gibts neben der manpage eigentlich auch irgendwo gute dokus zu mthema Scriptprogrammiereung?
Re: teilzeichenkette extrahieren
Vielleicht das <!--nohttp--><a href="http://"http://www-106.ibm.com/developerworks/edu/l-dw-linux-lpir21-i.html"" target="_blank">hier</a><!--url-->
http://www-106.ibm.com/developerworks/e ... r21-i.html
Cheers
Michael
http://www-106.ibm.com/developerworks/e ... r21-i.html
Cheers
Michael