Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Linux

Cách Tìm Từ Cụ Thể Trong Tệp Trên Linux

Mặc định, hầu hết công cụ tìm kiếm nhìn vào tên tệp, không phải nội dung. Tuy nhiên, chương trình tìm kiếm GNU nổi tiếng nhất, grep, sẽ nhìn vào bên trong tệp với cờ đúng. Ở đây chúng tôi sẽ chỉ cho bạn cách tìm từ cụ thể trong tệp trên Linux.

Dùng grep Tìm Từ Cụ Thể Trong Tệp

Cách Tìm Từ Cụ Thể Trong Tệp Trên Linux

Mặc định, grep tìm kiếm qua nội dung tệp cũng như tên tệp. Nó có sẵn trên đa số hệ thống Linux và chung giữa các distro. Tuy nhiên, hộp Linux nhỏ hoặc yếu hơn có thể thích lệnh khác, như ack.

Tùy thuộc vào cách tệp được mã hóa, grep có thể không luôn nhìn vào bên trong. Nhưng cho hầu hết định dạng dựa trên văn bản, grep có thể quét văn bản tệp cho mẫu chỉ định.

grep -Rw '/path/to/search/' -e 'pattern'

Cờ -R đặt grep ở chế độ đệ quy (recursive), điều hướng qua tất cả thư mục chứa trong thư mục chỉ định. Cờ -w tìm khớp từ toàn phần (whole word). Nghĩa là 'red' chỉ khớp 'red' bao quanh bởi ký tự khoảng trắng, không khớp 'redundant' hay 'tired'. Cờ -e đặt trước mẫu tìm kiếm. Nó hỗ trợ biểu thức chính quy mặc định.

Để tăng tốc grep, bạn dùng cờ --exclude và --include giới hạn tìm kiếm đến loại tệp nhất định. Ví dụ, --exclude=*.csv sẽ không tìm trong tệp phần mở rộng .csv. --include=*.txt, ngược lại, chỉ tìm trong tệp .txt. Cờ có thể thêm ngay sau lệnh grep, như dưới:

grep --exclude=*.csv -Rw '/path/to/search' -e 'pattern'

Bạn cũng có thể loại trừ thư mục chỉ định theo định dạng dưới:

grep --exclude-dir={dir1,dir2,*_old} -Rw '/path/to/search' -e 'pattern'

Lệnh này sẽ không tìm trong bất kỳ thư mục nào trong thư mục làm việc hiện tại tên dir1, dir2, hoặc khớp mẫu *_old, loại trừ chúng khỏi quá trình tìm. Nó sẽ thực thi tìm kiếm đệ quy, khớp từ toàn phần trên tất cả tệp khác trong thư mục làm việc hiện tại.

Dùng find Tìm Từ Cụ Thể Trong Tệp

Cách Tìm Từ Cụ Thể Trong Tệp Trên Linux

Mặc dù cú pháp find phức tạp hơn grep, một số người thích nó.

find . -name "*.php" -exec grep "pattern" {} \;

Lệnh này dùng cờ -exec của find để truyền tệp tìm thấy cho grep tìm kiếm. Với sắp xếp cú pháp khéo léo, bạn có thể dùng tìm kiếm hệ thống tệp nhanh của find để định vị loại tệp cụ thể muốn tìm, sau đó pipe chúng đến grep để tìm bên trong tệp.

Lưu ý find chỉ nhìn tên tệp, không phải nội dung. Đó là lý do grep cần thiết tìm văn bản và nội dung tệp. Các cờ grep bình thường nên hoạt động đầy đủ từ trong cờ -exec.

Dùng ack Tìm Từ Cụ Thể Trong Tệp

Lệnh ack có lẽ là công cụ tìm kiếm nhanh nhất, nhưng không phổ biến như các lựa chọn trên. Lệnh dưới sẽ tìm trong thư mục hiện tại.

ack 'pattern'

Nếu bạn muốn tìm trong tệp hoặc thư mục cụ thể, bạn thêm tệp đó hoặc đường dẫn đủ điều kiện vào tìm kiếm.

ack 'pattern' /path/to/file.txt

Kết Luận

Đối với hầu hết mọi người trong hầu hết tình huống, grep là công cụ tìm kiếm phổ biến tốt nhất. Bạn cũng có thể xem công cụ tìm kiếm khác, như RipGrep, cho tùy chọn tìm nhanh hơn.