grep para ignorar patrones


12

Estoy extrayendo URL de un sitio web usando cURL como se muestra a continuación.

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

Mi archivo new.txt es el siguiente.

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

Sin embargo, necesito extraer solo la información a continuación.

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

Estoy tratando de ignorar los <a hrefque tienen información en ellos y cuyo título termina con NOTNEEDED .

¿Cómo puedo modificar mi declaración grep?


¿La salida que está mostrando aquí es correcta? El texto que lo describe no tiene sentido junto con este ejemplo.
slm

1
¿No estás buscando curl www.somesite.com | grep "<a href=.*title=" | grep -v NOTNEEDED > new.txt?
terdon

@terdon, exactamente eso era lo que estaba buscando. Puedo aceptarlo como respuesta si lo publicas.
Ramesh

Ramesh, es básicamente la respuesta de @ slm. Lo acabo de editar para que pueda aceptarlo.
terdon

oh sí, no me di cuenta de que la tubería era tan poderosa. Lo he aceptado como respuesta. ¡Gracias!
Ramesh

Respuestas:


16

No estoy siguiendo completamente tu ejemplo + la descripción, pero parece que lo que quieres es esto:

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

Entonces, para su ejemplo:

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

Tengo una clase en la sección <a href. Básicamente, no quiero eso en mi salida.
Ramesh

9

La página del manual de grep dice:

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

Puede usar expresiones regulares para múltiples inversiones:

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

o

grep -v red | grep -v green | grep -v blue
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.