grep, aby zignorować wzory


12

Wyodrębniam adresy URL z witryny przy użyciu cURL, jak poniżej.

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

Mój plik new.txt jest jak poniżej.

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

Muszę jednak wyodrębnić tylko poniższe informacje.

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

Próbuję zignorować te, <a hrefktóre zawierają informacje i których tytuł kończy się na NOTNEEDED .

Jak mogę zmodyfikować moją instrukcję grep?


Czy wyświetlane tutaj wyniki są prawidłowe? Opisujący go tekst nie ma sensu wraz z tym przykładem.
slm

1
Nie szukasz curl www.somesite.com | grep "<a href=.*title=" | grep -v NOTNEEDED > new.txt?
terdon

@terdon, właśnie tego szukałem. Mogę zaakceptować odpowiedź, jeśli ją opublikujesz.
Ramesh

Ramesh, to w zasadzie odpowiedź @ slm. Właśnie go edytowałem, abyś mógł go zaakceptować.
terdon

och tak, nie zdawałem sobie sprawy, że fajka jest tak potężna. Zaakceptowałem to jako odpowiedź. Dzięki!
Ramesh

Odpowiedzi:


17

Nie w pełni podążam za twoim przykładem + opisem, ale brzmi to tak, jakbyś tego chciał:

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

Na przykład:

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

Mam klasę w sekcji <a href. Zasadniczo nie chcę tego w moich wynikach.
Ramesh

9

Strona man grep mówi:

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

Możesz użyć wyrażeń regularnych do wielu inwersji:

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

lub

grep -v red | grep -v green | grep -v blue
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.