2012-11-06 25 views
14

Tôi muốn tìm tất cả các dòng trong tệp văn bản chứa chuỗi "abc", nhưng không chứa chuỗi "def". Tôi có thể sử dụng lệnh grep để thực hiện tác vụ này không?grep không có chuỗi

+1

Có vẻ như bạn đang sử dụng grep để giúp bạn điều hướng theo cách của bạn thông qua một codebase; nếu vậy - tôi đã viết một công cụ gần đây để giúp làm cho hoạt động đó dễ dàng hơn nhiều: http://reviewboardstudents.wordpress.com/2012/10/22/ucosp-blog-post-sack-and-other-developer-shortcuts/ Hy vọng nó sẽ chứng minh hữu ích cho bạn cũng như –

+0

Tuyệt vời, tôi sẽ xem! –

Trả lời

26

Hoặc của chúng sẽ làm:

grep -v "def" input_file | grep "abc" 

hoặc

grep "abc" input_file | grep -v "def" 

Sau đây cũng sẽ giữ gìn màu nếu bạn chỉ muốn xem kết quả trên stdout:

grep --color=always "abc" input_file | grep -v "def" 

Tùy chọn(viết tắt của "đối sánh nghịch đảo") yêu cầu grep bỏ qua các dòng có mẫu được chỉ định - trong trường hợp này là def.

+0

Tuyệt vời, cảm ơn! Khi input_file của tôi lớn, có sự khác biệt về tốc độ giữa mã đầu tiên và mã thứ hai của bạn không? –

+1

@MikaH. Bạn có thể thêm 'thời gian' trước mỗi lệnh của tập lệnh để xem mỗi lần mất bao lâu. Tôi nghĩ rằng chỉ có một sự khác biệt không đáng kể. –

+0

Phần về bảo quản màu thực sự hữu ích. Cảm ơn một lần nữa! –

1

Điều này có thể thực hiện.

fgrep "abc" file | grep -v "def" 
Các vấn đề liên quan