Cách tìm một từ cụ thể trong một file trên Linux

Theo mặc định, hầu hết các công cụ tìm kiếm sẽ tìm file hoặc thư mục mà không tìm nội dung file. Tuy nhiên chương trình tìm kiếm GNU nổi tiếng, grep có thể tìm kiếm bên trong file với cờ chính xác. Bài viết này sẽ hướng dẫn các bạn cách tìm từ cụ thể trong một file trên Linux.

1. Sử dụng lệnh grep để tìm từ cụ thể trong một file

Theo mặc định, grep tìm kiếm nội dung cũng như tên file. Nó có mặt trên hầu hết các hệ thống Linux và các bản phân phối. Tuy nhiên, các bản Linux kém mạnh mẽ và nhỏ hơn có thể thích chạy lệnh khác như ack.

Phụ thuộc vào cách file được mã hóa, grep có thể không tìm kiếm bên trong file nhưng đối với hầu hết định dạng dựa trên văn bản, nó có thể quét văn bản trong file để tìm mẫu đã chỉ định.

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

Sử dụng lệnh grep

Cờ -R thiết lập grep ở chế độ đệ quy, điều hướng qua tất cả các thư mục chứa trong thư mục chỉ định. Cờ -w tìm kiếm các từ phù hợp với điều kiện trong lệnh. Ví dụ, từ red chỉ khớp với red được bao quanh bởi ký tự khoảng trắng. Cờ -e đưa ra mẫu tìm kiếm. Nó hỗ trợ các biểu thức chính quy theo mặc định.

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

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

Ngoài ra, bạn có thể loại bỏ thư mục được chỉ định theo định dạng dưới đây:

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

Lệnh này sẽ không tìm kiếm thư mục có tên là dir1, dir2 hoặc phù hợp với mẫu *_old trong quá trình tìm kiếm. Nó sẽ thực hiện tìm kiếm từ đầy đủ, đệ quy được chỉ định trên tất cả các file khác trong thư mục đang quét.

2. Sử dụng lệnh find để tìm kiếm từ cụ thể trong một file.

Sử dụng lệnh find

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

Lệnh này sẽ sử dụng cờ -exec của find để chuyển các file tìm thấy cho grep để tìm kiếm nội dung trong file. Với cách sắp xếp cú pháp thông minh, bạn có thể sử dụng công cụ tìm kiếm file hệ thống nhanh hơn của find để xác định loại file cụ thể muốn tìm kiếm trong đó, sau đó chuyển chúng sang grep để tìm kiếm bên trong các file.

Bạn cần lưu ý lệnh find chỉ tìm kiếm tên file không phải nội dung file. Đó là cần phải sử dụng thêm grep để tìm kiếm văn bản trong file. Lệnh find chỉ giúp tìm kiếm loại file nhanh hơn. 

3. Sử dụng lệnh ack để tìm từ cụ thể trong một file

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

ack 'pattern'

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

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

Chúc các bạn thực hiện thành công!

Thứ Tư, 29/05/2019 15:39
44 👨 100