Ik extraheer URLs van een website met cURL zoals hieronder.

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

Mijn new.txt-bestand is zoals hieronder.

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

Ik hoef echter alleen de onderstaande informatie uit te pakken.

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

Ik probeer de <a href te negeren die informatie erin en waarvan de titel eindigt op NOTNEEDED .

Hoe kan ik mijn grep-instructie wijzigen?

Reacties

  • Is de uitvoer jij ' wordt hier correct weergegeven? De tekst die het beschrijft, ' is niet logisch in dit voorbeeld.
  • Ben je ' niet op zoek naar curl www.somesite.com | grep "<a href=.*title=" | grep -v NOTNEEDED > new.txt?
  • @terdon, dat was precies wat ik zocht. Ik kan het als antwoord accepteren als je het plaatst.
  • Ramesh, het ' is in feite @slm ' s antwoord. Ik heb het zojuist bewerkt zodat je het kunt accepteren.
  • oh ja, ik realiseerde me niet dat pipe zo krachtig was. Ik heb het als antwoord geaccepteerd. Bedankt!

Antwoord

Ik “volg uw voorbeeld + de beschrijving niet volledig, maar het klinkt zoals u want is this:

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

Dus voor jouw voorbeeld:

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

Reacties

  • Ik heb een klas in de < a href-sectie. Eigenlijk wil ik dat niet in mijn uitvoer.

Antwoord

De grep man-pagina zegt:

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

U kunt reguliere expressies gebruiken voor meerdere inversies:

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

of

grep -v red | grep -v green | grep -v blue 

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *