grep untuk mengabaikan pola


12

Saya mengekstraksi URL dari situs web menggunakan cURL seperti di bawah ini.

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

File new.txt saya adalah seperti di bawah ini.

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

Namun, saya hanya perlu mengekstrak informasi di bawah ini.

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

Saya mencoba untuk mengabaikan <a hrefyang memiliki informasi di dalamnya dan yang judulnya diakhiri dengan NOTNEEDED .

Bagaimana saya bisa mengubah pernyataan grep saya?


Apakah output yang Anda tunjukkan di sini benar? Teks yang menggambarkannya tidak masuk akal bersamaan dengan contoh ini.
slm

1
Apakah kamu tidak mencari curl www.somesite.com | grep "<a href=.*title=" | grep -v NOTNEEDED > new.txt?
terdon

@terdon, tepat itulah yang saya cari. Saya dapat menerimanya sebagai jawaban jika Anda mempostingnya.
Ramesh

Ramesh, itu pada dasarnya jawaban @ slm. Saya baru saja mengeditnya sehingga Anda dapat menerimanya.
terdon

oh ya, saya tidak menyadari pipa sekuat ini. Saya menerimanya sebagai jawaban. Terima kasih!
Ramesh

Jawaban:


16

Saya tidak sepenuhnya mengikuti contoh Anda + deskripsi tetapi sepertinya yang Anda inginkan adalah ini:

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

Jadi untuk contoh Anda:

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

Saya memiliki kelas di bagian <a href. Pada dasarnya, saya tidak ingin itu di output saya.
Ramesh

9

The grep halaman manual mengatakan:

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

Anda dapat menggunakan ekspresi reguler untuk beberapa inversi:

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

atau

grep -v red | grep -v green | grep -v blue
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.