Newbie sucht Hilfe: Zahl aus Datei mit grep/cut/sed lesen und schreiben?

R

rainbow66

Grünschnabel
Guten Abend zusammen!

Ich hoffe, daß ich hier unter diesem Thema richtig bin. Von Linux habe ich gar keine Ahnung, ich verwende Windows XP.:O Aber nun bin ich mit ein paar Linux Dateien in Berührung gekommen und habe gar keinen Plan. Ich hoffe, mir hilft trotzdem jemand bei meinem Problem.

Also, ich möchte einen Reconnect-Script via Batchdatei ausführen. Dazu muß ich eine Variable auslesen und weiter verarbeiten. Ich habe mir die Windowsversionen von curl.exe, cut.exe, grep.exe und sed.exe besorgt und knoble nun schon einige Tage ohne Erfolg daran.

Und das möchte ich erreichen: In der Datei Test.txt (habe ich mit grep aus einer anderen Datei herausgefiltert und in Test.txt gespeichert) ist folgende Zeile enthalten:
<INPUT type=hidden name=tk value="1234567890">

Ich brauche nun den Wert 1234567890 und möchte diesen per Set=1234567890 definieren um ihn weiter verwenden zu können. Also habe ich versucht diesen aus zu lesen: cut -d """ -f 2 test.txt

Damit bekomme ich 1234567890 auf dem Bildschirm angezeigt. Habe dann versucht, diesen Wert in eine weitere Textdatei zu schreiben: cut -d """ -f 2 test.txt > ergebnis.txt

Dann kommt aber von cut eine Fehlermeldung. So wie ich es verstehe kann ich mit cut nur lesen, aber das Ergebnis nicht schreiben. Geht das dann mit sed irgendwie?

Bitte nicht lachen, für euch ist das sicher eine ganz klare Sache, für mich bis jetzt nicht zu durchschauen...:hilfe2:

Ich wäre wirklich für Hilfe dankbar!

Grüße,
rainbow66

Edit: Nun bin ich durch voriges Suchen doch im falschen Bereich gelandet! Sorry! Mod, bitte verschieben!! (erledigt, defcon)
 
Zuletzt bearbeitet von einem Moderator:
Also dein cut funktioniert bei mir hier nicht wirklich.

Hier mal eine von vielen Möglichkeiten:
echo "<INPUT type=hidden name=tk value="1234567890">" | awk -F'=' '{print $4}' | sed 's/'\>'/''/g'

Edit:
Hier nochmal nur mit grep
echo "<INPUT type=hidden name=tk value="1234567890">" | grep -o -E 'value=[0-9]*' | grep -E -o '[0-9]*'
 
Zuletzt bearbeitet:
Danke für Deine Antwort. Habe mir auch noch awk für Windows besorgt. Aber wie gebe ich das in der DOS-Shell ein? Ich bekomme so lauter Fehlermeldungen.

Bei Grep, kommt die Fehlermeldung, daß der -o Schalter nicht bekannt ist. Vermutlich unterscheiden sich die Windowsversionen bzgl. der Syntax etwas von den Linuxversionen.

Vielleicht ist noch wichtig, daß sich die Variable (in meinem Beispiel die Zahl 1234567890) jedes mal verändert. Ich denke aber, die Anzahl der Stellen bleibt gleich.
 
hier:
http://gnuwin32.sourceforge.net/packages/gawk.htm ---> Version 3.1.6.2962
http://gnuwin32.sourceforge.net/packages/sed.htm ---> Version 4.2
Grep (Ver. 2.4.2) und Cut (Ver. 2.0) waren bei Curl dabei.

bei Eingabe von:
Code:
awk -F"=" test.txt "{print $4}" | sed "s/"\>"/""/g"
kommt die Fehlermeldung "Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch"

Es ist doch richtig, daß ich unter Windows aus einfachen Anführungszeichen (') doppelte (") machen muß???
 
Zuletzt bearbeitet:
Also wenn ich das grep von selbiger Website benutze, funktioniert,
Code:
for /f "delims=" %a in ('grep -oe "[0-9]*" test.txt') do @set NUMMER=%a
echo %NUMMER%
Batch ist so eine Grütze. Wenn ich müsste, würde ich PowerShell lernen. Irgendeine .Net-Anwendung läuft sowieso meistens. Falls jemand wegen des Overheads meckern will ;)

cu
 
Zuletzt bearbeitet:
@slackfan

meine Batchdatei schaut so aus:
Code:
del %TEMP%\tk.txt
curl http://192.168.1.1//cgi-bin/admin?page=x -d "AdminPassword=ppp&next=10&page=x" -s | grep "tk value=" > %temp%\tk.txt

for /f ""delims="" %a in ("grep -oe ""[0-9]*""%temp%\tk.txt") do @set tk=%a
echo %tk%

Ich erhalte folgende Fehlermeldung:
Code:
"""" ist syntaktisch an dieser Stelle nicht verarbeitbar
Habe auch mit den " experimentiert, weil mir immer noch nicht klar ist, wie das bei Windows zu verwenden ist ( ' wird zu " und " wird zu "")???

@defcon
Eine Batchdatei wird doch unter Windows wie in einem DOS-Fenster (CMD) ausgeführt, oder? Bevor ich etwas in die Batchdatei übernehme, teste ich den Befehl im DOS-Fenster, ob er klappt. Ist das falsch?

Nicht das ihr denkt, ich bin zu faul zum suchen. Ich probiere, lese, suche, probiere wieder..... seit einer Woche. Mir fehlen halt die Grundlagen.
Hätte auch nicht gedacht, daß es so eine Aktion ist aus einer Textdatei einen Wert heraus zu lesen und dann als Variable weiter zu verarbeiten.

Auf jeden Fall bedanke ich mich vielmals bei jedem, der seine Zeit opfert und mir hier hilft!!!

Grüße,
rainbow66
 
Hallo,

Code:
echo OFF
for /f "delims=" %%a in ('grep -oe "[0-9]{8,11}"%temp%\tk.txt') do @set TK=%%a
echo %TK%

du musst den Unterschied zwischen doppelten und einfachen Hochkommata beachten.
Lass die einfach, wie sie sind.
Zudem hatte ich vergessen, dass die Syntax in Cmd-Dateien eine leicht andere ist, als in der Eingabeaufforderung. Da muss das %-Zeichen vor dem Platzhalter a verdoppelt werden.
Noch so ein unschöner Umstand. Deswegen ist es eher sinnvoll die Befehle via Editor in eine Cmd-Datei zu schreiben und parallel über die Eingabeaufforderung aufzurufen.

Nenn das bitte nicht Dos-Fenster :) Auf NT-basierten Betriebssystemen sieht das nur noch aus wie DOS, ist aber keines mehr. Das wird nur noch emuliert.


cu
 
ok, kein DOS mehr, versprochen!:D

Habe es jetzt genau so gemacht, wie Du geschrieben hast und die Datei ausgeführt. TK wird aber nicht gesetzt. Fehlermeldung:
Code:
grep: (standard input): Not enough space

Wenn ich "mem" ausführe kommt folgendes:
655360 Bytes gesamter konventioneller Speicher
655360 Bytes für MS-DOS verfügbar
590672 maximale Größe für ausführbares Programm

1048576 Bytes gesamter fortlaufender Erweiterungsspeicher
0 Bytes fortlaufender Erweiterungsspeicher verfügbar
941056 Bytes XMS-Speicher verfügbar
MS-DOS ist resident im oberen Speicherbereich (HMA).

Hat das was damit zu tun?
 
Hier erschöpft sich mein Wissen. Ist ja auch ein Linux-/Unixforum ;)
Handelt es sich jetzt um das grep des gnuwin32 Projektes?
Bei mir tut es (XP SP3). Du könntest noch egrep probieren, fall der reguläre Ausdruck für grep zu komplex ist. (Einfach das e voranstellen. Der Aufruf ist identisch.)
 
Zuletzt bearbeitet:
Ist mir auch nicht klar, warum es bei mir nicht klappt. Ich habe mich jetzt nach einer anderen Lösung bemüht und diese mit Autoit auch gefunden. Damit war das Problem in 10 min gelöst.

Nochmals vielen Dank füe Deine Bemühungen!:)

Grüße,
rainbow66
 

Ähnliche Themen

bash: Fehlermeldung und Werte in Array sortieren?

Zurück
Oben