grep để bỏ qua các mẫu


12

Tôi đang trích xuất URL từ một trang web bằng cURL như dưới đây.

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

Tệp new.txt của tôi như dưới đây.

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

Tuy nhiên, tôi chỉ cần trích xuất thông tin dưới đây.

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

Tôi đang cố gắng phớt lờ những thông tin<a hrefthông tin trong đó và có tiêu đề kết thúc với KHÔNG ĐƯỢC .

Làm thế nào tôi có thể sửa đổi tuyên bố grep của tôi?


Đầu ra bạn đang hiển thị ở đây có đúng không? Văn bản mô tả nó không có ý nghĩa cùng với ví dụ này.
slm

1
Không phải bạn đang tìm kiếm curl www.somesite.com | grep "<a href=.*title=" | grep -v NOTNEEDED > new.txt?
terdon

@terdon, chính xác đó là những gì tôi đang tìm kiếm. Tôi có thể chấp nhận nó như một câu trả lời nếu bạn đăng nó.
Ramesh

Ramesh, về cơ bản là câu trả lời của @ slm. Tôi vừa chỉnh sửa nó để bạn có thể chấp nhận nó.
terdon

oh yeah, tôi đã không nhận ra đường ống là mạnh mẽ này. Tôi đã chấp nhận nó như một câu trả lời. Cảm ơn!
Ramesh

Câu trả lời:


16

Tôi không hoàn toàn làm theo ví dụ của bạn + mô tả nhưng có vẻ như những gì bạn muốn là đây:

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

Vì vậy, ví dụ của bạn:

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

Tôi có một lớp trong phần <a href. Về cơ bản, tôi không muốn điều đó trong đầu ra của mình.
Ramesh

9

Trang grep man nói:

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

Bạn có thể sử dụng biểu thức chính quy cho nhiều lần đảo ngược:

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

hoặc là

grep -v red | grep -v green | grep -v blue
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.