2013-02-27 29 views

Trả lời

28

Hãy thử điều này:

grep 'expr1.*expr2\|expr2.*expr1'

Đó là một chút phức tạp hơn nó cần phải được nếu bạn biết rằng " expr2 "sẽ luôn xuất hiện sau" expr1 ". Trong trường hợp đó, bạn có thể đơn giản hóa nó để:

grep 'expr1.*expr2'

+0

Thay vì có nhiều câu hỏi giống hệt nhau - ở trên đã làm việc cho tôi ngoại trừ tôi đã làm: 'sudo grep -E -rnw '/ var/log /' -e 'Hết bộ nhớ. * Ngày 17 tháng 1 | Ngày 17 tháng 1 * Hết bộ nhớ ''- không có dấu gạch chéo ngược. Linux Mint 18.3, GNU bash 4.3.48 – nate

2

Những gì bạn phải làm việc.

Sau đây là một cách khác để đạt được hiệu quả tương tự:

grep -E 'expr1.*expr2|expr2.*expr1' 
+0

Tôi biết nó hoạt động :-). Tôi đã mệt mỏi khi gọi grep hai lần. Nhưng có vẻ như nó nhanh hơn chỉ viết grep hai lần rồi gõ vào. Thật không may, tôi thường không biết thứ tự biểu thức. Tôi đã hy vọng cho một cái gì đó như 'grep (expr1ANDexpr2)' :-). Bằng cách này, điều này thậm chí còn nhanh hơn trong một sript hơn gọi grep hai lần? – sup

28

Bạn có thể cung cấp một số biểu thức để tìm kiếm với một số cờ -e, see this post.

ví dụ:

grep -e expr1 -e expr2

+7

Hm, nhưng tìm kiếm này expr2 HOẶC expr2, tôi muốn AND ... – sup

+0

@sup: trong GNU grep 2.16 dòng lệnh được đề xuất tìm kiếm cả hai biểu thức – fred

+0

Tôi đang chạy GNU GREP 2.25 và chạy ' grep --version | grep -e là phần mềm -e' dường như không tìm kiếm các dòng chứa cả hai exrpresions, nhưng nó tìm kiếm các dòng có chứa một trong hai expresion. – sup

1

Trên thực tế đề nghị của riêng bạn là gần như chính xác nếu bạn muốn để có được những dòng có chứa cả hai biểu thức. Sử dụng:

grep expr1 somefile | grep expr2 
+1

Ồ, tôi thường sử dụng 'cat somefile | grep expr1 | grep expr2', nhưng tôi nghĩ rằng nó không quan trọng mà phần mềm tôi sử dụng để đường ống các công cụ :-). – sup

+0

Điều này sẽ tạo "và" thay vì thao tác "hoặc", phải không? –

+0

Bạn cũng có thể sử dụng 'grep

Các vấn đề liên quan