Wie kann ich awk verwenden, um URLs aus einer HTML-Datei zu extrahieren?

8

Ich habe eine HTML-Datei mit Javascript und CSS in der Quelle. In der JS ist eine Reihe von URLs aufgeführt, die in andere Metadaten eingebettet sind. Ich möchte awk verwenden, um die URLs zu extrahieren (alle in doppelten Anführungszeichen mit dem Präfix http: // eingeschlossen) und die URLs in stdout zu speichern. Aber ich weiß nicht, wie man awk benutzt, aber es scheint das Werkzeug zu sein, das man benutzt.

{
title: "Dsssat",
artist: "cxpl djij awsoj e",
mp3: "http://somesite.com/seal/dsssat.mp3",
},
Ronaldo Nascimento
quelle

Antworten:

8

Sie können verwenden grep. So schließen Sie die doppelten Anführungszeichen ein:

grep -o '"http://[^"]*"' myfile.html

So schließen Sie doppelte Anführungszeichen aus:

grep -o 'http://[^"]*' myfile.html

Bearbeiten

Möglicherweise möchten Sie weitere Filter durchführen, um sicherzustellen, dass Sie nur mit den URLs in den JavaScript-Objekten übereinstimmen:

grep -o 'mp3: "http://[^"]*"' myfile.html | grep -o '"http://[^"]*"'

grep -o 'mp3: "http://[^"]*"' myfile.html | grep -o 'http://[^"]*'
TachyonVortex
quelle
9

Warum awk verwenden? sedist besser darin:

sed -ne 's/.*\(http[^"]*\).*/\1/p' < foo.js
Dennis Kaarsemaker
quelle
awk = wird normalerweise als Datenextraktionseditor verwendet sed = stream, der eine Transformation anwendet
Ronaldo Nascimento
Wie verwende ich Curl, um jeden einzelnen zu greifen?
Ronaldo Nascimento
1
sed -ne 's /.* (http [^ "] *). * / \ 1 / p' <foo.js | xargs curl
Dennis Kaarsemaker
2
@RonaldoNascimento Beachten Sie, dass dadurch nur die letzte URL jeder Zeile extrahiert wird. Dies kann je nach Dateiformat von Bedeutung sein oder auch nicht.
Gilles 'SO - hör auf böse zu sein'
1
Das hängt davon ab, was Sie tun möchten. Wenn Sie Scripting unter Linux lernen möchten, dann ja: Konzentrieren Sie sich auf Sprachen wie Perl und Python. sed und awk sind gut für Oneliner, aber nicht für größere Aufgaben.
Dennis Kaarsemaker