Ich extrahiere URLs von einer Website mit cURL wie folgt.
curl www.somesite.com | grep "<a href=.*title=" > new.txt
Meine new.txt-Datei lautet wie folgt.
<a href="http://website1.com" title="something"> <a href="http://website1.com" information="something" title="something"> <a href="http://website2.com" title="some_other_thing"> <a href="http://website2.com" information="something" title="something"> <a href="http://websitenotneeded.com" title="something NOTNEEDED">
Ich muss jedoch nur die folgenden Informationen extrahieren.
<a href="http://website1.com" title="something"> <a href="http://website2.com" information="something" title="something">
Ich versuche, die <a href
zu ignorieren, die Informationen in ihnen und deren Titel endet mit NOTNEEDED .
Wie kann ich meine grep-Anweisung ändern?
Kommentare
- Ist die Ausgabe Sie ' wird hier richtig angezeigt? Der Text, der es beschreibt, ist ' zusammen mit diesem Beispiel nicht sinnvoll.
- Sind Sie nicht ' auf der Suche nach
curl www.somesite.com | grep "<a href=.*title=" | grep -v NOTNEEDED > new.txt
? - @terdon, genau das habe ich gesucht. Ich kann es als Antwort akzeptieren, wenn Sie es posten.
- Ramesh, ' ist im Grunde @slm ' s Antwort. Ich habe es gerade bearbeitet, damit Sie es akzeptieren können.
- Oh ja, ich wusste nicht, dass Pipe so mächtig ist. Ich habe es als Antwort akzeptiert. Danke!
Antwort
Ich folge Ihrem Beispiel + der Beschreibung nicht vollständig, aber es klingt wie Sie Dies ist Folgendes:
$ grep -v "<a href=.*title=.*NOTNEEDED" sample.txt <a href="http://website1.com" title="something"> <a href="http://website1.com" information="something" title="something"> <a href="http://website2.com" title="some_other_thing"> <a href="http://website2.com" information="something" title="something">
Für Ihr Beispiel also:
$ curl www.example.com | grep -v "<a href=.*title=" | grep -v NOTNEEDED > new.txt
Kommentare
- Ich habe eine Klasse im Abschnitt < href. Grundsätzlich möchte ich das nicht in meiner Ausgabe.
Antwort
Auf der Manpage grep heißt es:
-v, --invert-match Invert the sense of matching, to select non-matching lines. (-v is specified by POSIX .)
Sie können reguläre Ausdrücke für mehrere Inversionen verwenden:
grep -v "red\|green\|blue"
oder
grep -v red | grep -v green | grep -v blue