2014-02-18 9 views
5

Ich muss alle Seitenverknüpfungen von http://en.wikipedia.org/wiki/Meme herunterladen und sie mit einem Befehl in einer Datei speichern.wget grep sed, um Links zu extrahieren und in eine Datei zu speichern

Das erste Mal mit der Befehlszeile, so bin ich mir nicht sicher, die genauen Befehle, Flags usw. zu verwenden. Ich habe nur eine allgemeine Vorstellung davon, was zu tun ist und musste nach dem suchen, was href bedeutet.

wget http://en.wikipedia.org/wiki/Meme -O links.txt | grep 'href=".*"' | sed -e 's/^.*href=".*".*$/\1/' 

Die Ausgabe der Links in der Datei muss kein bestimmtes Format haben.

+0

Betrachten Sie nur 'Links -dump' oder' lynx-dump'. – kojiro

+0

@ cajole0110 Sie können den Text normalerweise nicht weiterleiten, wenn Sie ihn stattdessen in einer Datei speichern. Deshalb funktionieren die Befehle von BMW, aber nicht Ihre. – jpaugh

+0

+1 für gute Nachforschungen. – jpaugh

Antwort

4

mit GNU grep:

grep -Po '(?<=href=")[^"]*' links.txt 

oder mit wget

wget http://en.wikipedia.org/wiki/Meme -q -O - |grep -Po '(?<=href=")[^"]*' 
+0

Sie können auch das '-q'-Flag hinzufügen, um zu verhindern, dass der Fortschrittsbalken mit der tatsächlichen Ausgabe interleaved wird (der Fortschrittsbalken wird auf stderr gedruckt, so dass es als solches nicht stört, es sieht einfach funky aus). – Carpetsmoker

1

Sie wget ‚s Spinne Modus nutzen könnten. Sehen Sie diese SO-Antwort für ein Beispiel.

wget spider

0
wget http://en.wikipedia.org/wiki/Meme -O links.txt | sed -n 's/.*href="\([^"]*\)".*/\1/p' 

aber nehmen nur 1 href pro Zeile, wenn es mehr als 1, andere sind verloren (das gleiche wie Ihre ursprüngliche Linie). Sie vergessen auch, eine Gruppe (\( ->\)) in Ihrem ursprünglichen sed ersten Muster so \1 zu nichts zu haben