Variable bereich aus einer Datei auslesen ?? bitte um hilfe

keks88
Interessierter
Interessierter
Beiträge: 41
Registriert: Freitag 27. August 2004, 00:50

Variable bereich aus einer Datei auslesen ?? bitte um hilfe

Beitrag von keks88 »

Hallo ,

Sorry wenn ich hier falsch bin, aber ich wusste nicht wohin ich mein problem posten soll.

Ich würde gerne aus einer Datei einen variablen bereich auslesen(nur den datum,Rot markiert), ich weiß aber leider nicht wie ich das machen soll. Hab schon mit "grep" versucht, aber dann wird die ganze zeile ausgelesen.

Inhalt der datei:

<table>
<tr><td>current time:</td><td>Sat Oct 16 10:25:02 2004
</td></tr>
</table>
</body>
</html>

bin für jede hilfe dankbar !

Gruß
Keks88
rasc
Senior Member
Beiträge: 5071
Registriert: Dienstag 18. September 2001, 00:00

Beitrag von rasc »

nimm z.B. perl

Funktionen (z.b.)
- split
- match (regexp)
...
keks88
Interessierter
Interessierter
Beiträge: 41
Registriert: Freitag 27. August 2004, 00:50

Beitrag von keks88 »

Ich dachte an eine lösung mit shellscript ! Das wäre die einfachste weg, um die ganze dann in einem image einzubauen.
essu
Tuxboxer
Tuxboxer
Beiträge: 2452
Registriert: Montag 21. Oktober 2002, 10:04

Beitrag von essu »

Code: Alles auswählen

man expr
dort 'substr'
Schon gelesen ???
ENIGMA-DOC
racker
Einsteiger
Einsteiger
Beiträge: 369
Registriert: Samstag 29. Mai 2004, 01:50

Beitrag von racker »

oder:

Code: Alles auswählen

VAR=`cat Datei |grep current|cut -d e> e -f5`
Gruß
Zuletzt geändert von racker am Samstag 16. Oktober 2004, 15:20, insgesamt 1-mal geändert.
keks88
Interessierter
Interessierter
Beiträge: 41
Registriert: Freitag 27. August 2004, 00:50

Beitrag von keks88 »

Erstmal danke an alle für eure hilfe, aber ich bin kein shellscript profi (dann hätte ich die frage auch nicht gestellt). Ich glaube ich bräuchte bißchen mehr unterstützung.

Habe jetzt racker sein code probiert, aber dann kommt immer folgende fehlermeldung:

d: applet not found


Gruß
racker
Einsteiger
Einsteiger
Beiträge: 369
Registriert: Samstag 29. Mai 2004, 01:50

Beitrag von racker »

Immer dieser Ärger mit den Hochkommata.
Ich habe das mal oben verbessert.

Wenn das immer noch nicht funktionieren sollte, dann
beschreibe mal genau was du machst und wie du vorgehst.

Gruß
keks88
Interessierter
Interessierter
Beiträge: 41
Registriert: Freitag 27. August 2004, 00:50

Beitrag von keks88 »

Hallo racker,

will immer noch nicht !

Ich habe folgendes gemacht !

Code: Alles auswählen

VAR=`cat /tmp/popup |grep current|cut -d e> e -f5`
popup ist die datei wo die datum drine steht.

dann kommt aber die folgende fehlermeldung:

-sh: cannot create e: Read-only file system

mit Read-only ist klar(ist ein Squashfs File system), aber wo mus ich den ausgabe pfad eingeben und warum will er den komata als dateinamen nehmen ?

Gruß
racker
Einsteiger
Einsteiger
Beiträge: 369
Registriert: Samstag 29. Mai 2004, 01:50

Beitrag von racker »

Ich kann jetzt nur mal vermuten.
Du verbindest dich über Windows-Telnet mit der Box?
Wenn ja, dann müssen die Hochkommata um e> e mit
der Shift und der # -Taste eingegeben werden. Also '>' :D
Ansonsten würde ich vor dem Befehl ins /tmp Verzeichnis wechseln.
Die Ausgabe kannst du dir dann mit echo $VAR anschauen.

Gruß
keks88
Interessierter
Interessierter
Beiträge: 41
Registriert: Freitag 27. August 2004, 00:50

Beitrag von keks88 »

Hi racker,

Sorry , aber geht immer noch nicht.
Ja, ich habs immer mit dem Windows telnet versucht, aber jetzt habe ich es mal als Shelldatei gestartet, läuft aber trotzdem nicht.
Als fehlermeldung kommt " d>: applet not found " wieder

So habe ich es gemacht:

Code: Alles auswählen

#!/bin/sh
wget -O /tmp/popup http://127.0.0.1/cgi-bin/status
VAR=`cat /tmp/popup |grep current|cut -d e> e -f5`
echo $VAR
exit
Ich habe dir mal HIER die Popup datei angehängt. Kannst ja mal versuchen ob es bei dir läuft.

Gruß
Keks88
Zuletzt geändert von keks88 am Sonntag 17. Oktober 2004, 15:06, insgesamt 1-mal geändert.
essu
Tuxboxer
Tuxboxer
Beiträge: 2452
Registriert: Montag 21. Oktober 2002, 10:04

Beitrag von essu »

Code: Alles auswählen

expr substr "$(cat /tmp/popup | grep current )" 31 19
Schon gelesen ???
ENIGMA-DOC
racker
Einsteiger
Einsteiger
Beiträge: 369
Registriert: Samstag 29. Mai 2004, 01:50

Beitrag von racker »

Wie bereits geschrieben: Deine Hochkommata um > sind falsch.

Code: Alles auswählen

#!/bin/sh
wget -O /tmp/popup http://127.0.0.1/cgi-bin/status
VAR=`cat /tmp/popup |grep current|cut -d'>' -f5`
echo $VAR
exit
Den Link würde ich an deiner Stelle entfernen.

Gruß
keks88
Interessierter
Interessierter
Beiträge: 41
Registriert: Freitag 27. August 2004, 00:50

Beitrag von keks88 »

@ racker

Ich habe beide Varianten ausprobiert, aber beidesmal kam die fehlermeldung. Funktioniert es bei dir ?

@ essu

Danke !!! Funktioniert einwandfrei .
Wärst du so nett und würdest mir kurz erklären, was da passiert ?
Nur zum verständniss.

gruß
Keks88
essu
Tuxboxer
Tuxboxer
Beiträge: 2452
Registriert: Montag 21. Oktober 2002, 10:04

Beitrag von essu »

Code: Alles auswählen

expr substr "$(cat /tmp/popup | grep current )" 31 19
im inneren passiert dasgleiche wie bei der anderen Lösung:
cat /tmp/popup gibt den Inhalt der Datei popup aus, diese Ausgabe wird weiter geleitet zu grep, das die Zeile sucht, in der current steht.
expr mit der option substr extrahiert aus dem so gewonnenen Ausdruck, $(cat /tmp/popup | grep current), eine Zeichenkette, die mit dem 31. Zeichen beginnt und 19 Zeichen lang ist.
Schon gelesen ???
ENIGMA-DOC
racker
Einsteiger
Einsteiger
Beiträge: 369
Registriert: Samstag 29. Mai 2004, 01:50

Beitrag von racker »

@keks88

Bei mir funktioniert es einwandfrei mit den Zeilen aus
deinem ersten Posting.

Wie man sieht gibt es immer mehrere Lösungen für eine Aufgabe. :wink:
In diesem Fall funktioniert auch expr weil die Länge
der Zeichenkette bekannt ist.

Gruß
keks88
Interessierter
Interessierter
Beiträge: 41
Registriert: Freitag 27. August 2004, 00:50

Beitrag von keks88 »

Alles klar, essu ! Danke nochmal für eure hilfe !

Da ich ja schon hier bin, hätte ich gleich noch ne frage.

Kann man im shellscript mit Dezimalzahlen rechnen ?

Ich würde gerne Bytes in Kbytes umrechen, aber ich bekomme immer nur Ganzzahlen als ergebnis und die nachkommastellen werden nicht angezeigt. Habt ihr ne Idee, wie man das lösen könnte ?

Gruß
Keks88
Zuletzt geändert von keks88 am Mittwoch 20. Oktober 2004, 03:06, insgesamt 2-mal geändert.
ankn99
Interessierter
Interessierter
Beiträge: 41
Registriert: Dienstag 4. Februar 2003, 23:44

Beitrag von ankn99 »

Ich würde auch lieber den code mit der cut -f Funktion wählen, sonst kommst Du ins Rudern, wenn z.B. der 1. Oktober wäre da dann die länge nicht mehr hinhaut. Währen Du bei der cut -f Variante nach Feldern gehst, wobei als Feldtrenner > gewählt wurde. Was die Rechnerei betrifft, währe es besser Du benutzt awk für die Geschichte.
-----
Grüße aus 1xxxx
essu
Tuxboxer
Tuxboxer
Beiträge: 2452
Registriert: Montag 21. Oktober 2002, 10:04

Beitrag von essu »

ankn99 hat geschrieben:Ich würde auch lieber den code mit der cut -f Funktion wählen, sonst kommst Du ins Rudern, wenn z.B. der 1. Oktober wäre da dann die länge nicht mehr hinhaut. Währen Du bei der cut -f Variante nach Feldern gehst, wobei als Feldtrenner > gewählt wurde. Was die Rechnerei betrifft, währe es besser Du benutzt awk für die Geschichte.
BTW: fcut (und erst recht awk, trotz kerlimanns einsatz) ist nicht in allen images enthalten, auch am 1. Oktober wird es mit der Skriptzeile kein Problem geben, allerdings beim Wechsel auf fünfstellige Jahreszahlen(das sog. 10k-Problem ;) )
Mit expr liessen sich schliesslich auch noch die delimiter finden und die Gesamtlänge des Strings berechnen
Schon gelesen ???
ENIGMA-DOC
ChakaZulu
Developer
Beiträge: 457
Registriert: Sonntag 23. März 2003, 00:39

Beitrag von ChakaZulu »

essu hat geschrieben:

Code: Alles auswählen

expr substr "$(cat /tmp/popup | grep current )" 31 19
ich bin auch immer ein kandidat für den "most useless use of cat" award, deswegen kann ich ja darauf hinweisen, dass es auch einfacher mit

Code: Alles auswählen

$(grep current /tmp/popup)
geht ;)

wobei die $() konstruktion IMHO bash spezifisch ist, portabler wäre

Code: Alles auswählen

`grep current /tmp/popup`

ciao,

ChakaZulu
essu
Tuxboxer
Tuxboxer
Beiträge: 2452
Registriert: Montag 21. Oktober 2002, 10:04

Beitrag von essu »

ChakaZulu hat geschrieben:ich bin auch immer ein kandidat für den "most useless use of cat" award[...]
Tja, den Titel musst du jetzt wohl mir überlassen. :)
Schon gelesen ???
ENIGMA-DOC
keks88
Interessierter
Interessierter
Beiträge: 41
Registriert: Freitag 27. August 2004, 00:50

Bytes in KBytes umrechnen

Beitrag von keks88 »

Ich habe jetzt eine Lösung gefunden:

Code: Alles auswählen

a=$(expr 567456 / 1000) ; b=$(expr 567456 % 1000) ; echo $a.$b KBytes
ergebnis : 567.456 KBytes