grep pour ignorer les modèles


12

J'extrais des URL d'un site Web en utilisant cURL comme ci-dessous.

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

Mon fichier new.txt est comme ci-dessous.

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

Cependant, je dois extraire uniquement les informations ci-dessous.

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

J'essaie d'ignorer ceux <a hrefqui contiennent des informations et dont le titre se termine par NOTNEEDED .

Comment puis-je modifier ma déclaration grep?


La sortie que vous montrez ici est-elle correcte? Le texte qui le décrit n'a pas de sens avec cet exemple.
slm

1
Tu ne cherches pas curl www.somesite.com | grep "<a href=.*title=" | grep -v NOTNEEDED > new.txt?
terdon

@terdon, c'est exactement ce que je cherchais. Je peux l'accepter comme réponse si vous la postez.
Ramesh

Ramesh, c'est essentiellement la réponse de @ slm. Je viens de le modifier pour que vous puissiez l'accepter.
terdon

oh ouais, je ne savais pas que la pipe était aussi puissante. Je l'ai accepté comme réponse. Merci!
Ramesh

Réponses:


16

Je ne suis pas complètement votre exemple + la description, mais cela ressemble à ce que vous voulez:

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

Donc pour votre exemple:

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

J'ai une classe dans la section <a href. En gros, je ne veux pas ça dans ma sortie.
Ramesh

9

La page de manuel grep dit:

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

Vous pouvez utiliser des expressions régulières pour plusieurs inversions:

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

ou

grep -v red | grep -v green | grep -v blue
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.