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.