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 grep
mộ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.*termA
tì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.*termA
khớp với tất cả các chuỗi chứa cả hai thuật ngữ.
Cuối cùng, -z
khó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).