grep, um Muster zu ignorieren


12

Ich extrahiere URLs von einer Website mit cURL (siehe unten).

curl www.somesite.com | grep "<a href=.*title=" > new.txt

Meine new.txt-Datei ist 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 zu ignorieren <a href, die Informationen enthalten und deren Titel mit NOTNEEDED endet .

Wie kann ich meine grep-Anweisung ändern?


Ist die Ausgabe, die Sie hier anzeigen, korrekt? Der Text, der dies beschreibt, ergibt zusammen mit diesem Beispiel keinen Sinn.
slm

1
Sind Sie nicht suchen curl www.somesite.com | grep "<a href=.*title=" | grep -v NOTNEEDED > new.txt?
Terdon

@terdon, genau das habe ich gesucht. Ich kann es als Antwort akzeptieren, wenn Sie es posten.
Ramesh

Ramesh, es ist im Grunde die Antwort von @ slm. Ich habe es gerade bearbeitet, damit Sie es akzeptieren können.
Terdon

oh ja, ich wusste nicht, dass Pipe so mächtig ist. Ich habe es als Antwort akzeptiert. Vielen Dank!
Ramesh

Antworten:


16

Ich folge Ihrem Beispiel + der Beschreibung nicht vollständig, aber es hört sich so an, als ob Sie folgendes wollen:

$ 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">

Also für dein Beispiel:

$ curl www.example.com | grep -v "<a href=.*title=" | grep -v NOTNEEDED > new.txt

Ich habe eine Klasse in der Kategorie <a href. Grundsätzlich möchte ich das nicht in meiner Ausgabe.
Ramesh

9

Die grep- Manpage sagt:

-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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.