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 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.