grep per ignorare i modelli


12

Sto estraendo gli URL da un sito Web utilizzando cURL come di seguito.

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

Il mio file new.txt è il seguente.

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

Tuttavia, devo estrarre solo le informazioni di seguito.

<a href="http://website1.com" title="something">
<a href="http://website2.com" information="something" title="something">

Sto cercando di ignorare i contenuti <a hrefche contengono informazioni e il cui titolo termina con NOTNEEDED .

Come posso modificare la mia dichiarazione grep?


L'output che stai mostrando qui è corretto? Il testo che lo descrive non ha senso insieme a questo esempio.
slm

1
Non stai cercando curl www.somesite.com | grep "<a href=.*title=" | grep -v NOTNEEDED > new.txt?
terdon

@terdon, era esattamente quello che stavo cercando. Posso accettarlo come risposta se lo pubblichi.
Ramesh,

Ramesh, in pratica è la risposta di @ slm. L'ho appena modificato in modo da poterlo accettare.
terdon

oh sì, non mi rendevo conto che la pipa fosse così potente. L'ho accettato come risposta. Grazie!
Ramesh,

Risposte:


16

Non sto seguendo completamente il tuo esempio + la descrizione ma sembra che quello che vuoi sia questo:

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

Quindi, per il tuo esempio:

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

Ho una classe nella sezione <a href. Fondamentalmente, non lo voglio nel mio output.
Ramesh,

9

La pagina man di grep dice:

-v, --invert-match
    Invert the sense of matching, to select non-matching lines. (-v is specified by POSIX .) 

Puoi usare espressioni regolari per più inversioni:

grep -v 'red\|green\|blue'

o

grep -v red | grep -v green | grep -v blue
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.