grep игнорировать шаблоны


12

Я извлекаю URL-адреса с веб-сайта, используя cURL, как показано ниже.

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

Мой новый файл .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">
<a href="http://websitenotneeded.com" title="something NOTNEEDED">

Однако мне нужно извлечь только приведенную ниже информацию.

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

Я пытаюсь игнорировать те, <a hrefкоторые имеют информацию в них и чей заголовок заканчивается NOTNEEDED .

Как я могу изменить свое утверждение grep?


Является ли вывод, который вы здесь показываете, правильным? Текст, описывающий это, не имеет смысла вместе с этим примером.
SLM

1
Вы не ищете curl www.somesite.com | grep "<a href=.*title=" | grep -v NOTNEEDED > new.txt?
Тердон

@terdon, именно это я и искал. Я могу принять это как ответ, если вы отправите это.
Рамеш,

Рамеш, это в основном ответ @ slm. Я только что отредактировал это, чтобы вы могли принять это.
Тердон

о да, я не понимал, что труба была такой мощной. Я принял это как ответ. Благодарность!
Рамеш,

Ответы:


16

Я не полностью следую вашему примеру + описанию, но звучит так, как вы хотите:

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

Итак, для вашего примера:

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

У меня есть класс в разделе <a href. В принципе, я не хочу, чтобы в моем выводе.
Рамеш,

9

Страница руководства grep гласит:

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

Вы можете использовать регулярные выражения для нескольких инверсий:

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

или

grep -v red | grep -v green | grep -v blue
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.