Estou extraindo URLs de um site usando cURL como abaixo.

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

Meu arquivo new.txt é o seguinte.

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

No entanto, preciso extrair apenas as informações abaixo.

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

Estou tentando ignorar <a href que tem informações neles e cujo título termina com NOTNEEDED .

Como posso modificar minha instrução grep?

Comentários

  • A saída é para você ' está mostrando aqui correto? O texto que o descreve não ' não faz sentido junto com este exemplo.
  • Não ' você está procurando curl www.somesite.com | grep "<a href=.*title=" | grep -v NOTNEEDED > new.txt?
  • @terdon, era exatamente isso que eu procurava. Posso aceitar como uma resposta se você postar.
  • Ramesh, ' é basicamente @slm ' resposta s. Acabei de editar, então você pode aceitá-lo.
  • ah sim, eu não sabia que o cachimbo era tão poderoso. Eu aceitei isso como uma resposta. Obrigado!

Resposta

Não estou seguindo totalmente o seu exemplo + a descrição, mas parece o que você quero é este:

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

Então, para seu exemplo:

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

Comentários

  • Tenho uma aula na seção < a href. Basicamente, não quero isso na minha saída.

Resposta

A página do manual grep diz:

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

Você pode usar expressões regulares para múltiplas inversões:

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

ou

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

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *