Nếu tệp của bạn không chứa byte rỗng
Trong trường hợp này, bạn có thể sử dụng grepmột mình:
grep -Plz "termA.*termB|termB.*termA" *
Làm thế nào nó hoạt động:
Các Perl Regular Expressions Tương thích termA.*termB và termB.*termAtìm kiếm cho các chuỗi đó có cả các điều khoản trong đó.
PCRE kết hợp termA.*termB|termB.*termAkhớp với tất cả các chuỗi chứa cả hai thuật ngữ.
Cuối cùng, -zkhóa chuyển làm cho các dòng dữ liệu kết thúc bằng byte rỗng thay vì dòng mới.
Nhân tiện, không cần sử dụng -P. Nếu bạn muốn tiếp tục sử dụng Biểu thức chính quy cơ bản POSIX , cú pháp tương tự:
grep -lz "termA.*termB\|termB.*termA" *
Nếu tệp của bạn chứa byte rỗng
Trong trường hợp này, bạn sẽ cần các công cụ phụ trợ:
(grep -l termA * ; grep -l termB *) | sort | uniq -d
Làm thế nào nó hoạt động:
grep -l termA * ; grep -l termB *hiển thị tất cả các tập tin có chứa một trong các điều khoản. Các tập tin có chứa cả hai điều khoản sẽ được hiển thị hai lần.
sort sắp xếp đầu ra.
uniq -d chỉ hiển thị các dòng trùng lặp (các dòng bắt buộc phải được sắp xếp).