PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Formular-URLs aus Text/Html-Dateien ber bash



AlexK
18-08-2007, 19:08
Hy,

ich will gerne aus einer Internetseite immer die aktuelle Formularabsende-URL haben. Runterladen kann ich die Seite ja mit z.B. wget.

Sagen wir mal die gesuchte URL ist: http://(ab123.seite.de)/cgi-bin/upload.cgi?id=(2342134)
(Die wichtigen Sachen der gesuchten URL hab ich in Klammern gesetzt)

Ich weis nicht mit welchem Befehl man aus einer ganzen Text/Html-Datei so eine URL rauskriegen kann bzw. wie man generell eine URL aus einer Datei holen kann?

EDIT:
Ich denke dürfte etwa so änlich sein, aber findet nix.

cat datei.txt | sed -e 'action="([^"])"'

Halt damit er immer nach 'action="(url)"' in der gesamten Datei sucht.

zst
18-08-2007, 23:07
Hallo AlexK,

Du könntest statt sed auch grep benutzen, also etwa so:


grep "action=" datei.txt

Gruss zst

jan61
19-08-2007, 15:37
So gehts z. B.:


sed -n '/ action=/s/.* action="\([^"]\+\)".*/\1/p' datei.htmlDu kannst also den sed sowohl zum Suchen der relevanten Zeilen als auch gleich zum Extrahieren der gewünschten Textstellen benutzen. Die Option -n verhindert die automatische Ausgabe aller Zeilen. Mit dem Suffix p am Ende des sed-Befehls sorgst Du dafür, dass die bearbeitete Zeile ausgegeben wird. Der Präfix / action=/ arbeitet wie grep. Beim sed musst Du außerdem dafür sorgen, dass die runden Klammern für die Gruppierung der Haltepuffer sowie das + (mindestens 1 Zeichen zwischen den "") entwertet sind. Alternativ kannst Du mit der Option -r (erweiterte Syntax für reguläre Ausdrücke) arbeiten, dann sieht das Ganze so aus:


sed -nr '/ action=/s/.* action="([^"]+)".*/\1/p' datei.htmlJan

jan61
19-08-2007, 18:39
Wenn Du die einzelnen Bestandteile der URL aufdröseln willst, dann ginge das z. B. so (ich gehe mal nach Deiner Beispiel-URL davon aus, dass Du u. a. den Servernamen und den id-Wert haben willst):
sed -nr '/ action=/s/.* action="([^:]+):\/\/([^/?]+)(\/[^?]+).*[?&]id=([^"&]+).*/\1 \2 \3 \4/p' datei.html | \
while read prot srv path id; do
echo "Protokoll: [$prot] Server: [$srv] Path: [$path] ID: [$id]"
doneDas funktioniert nur dann, wenn die URL absolut angegeben ist (also vollständig in der Form Protokoll://Server/Pfad?...id=xyz... existiert).