Computer >> Máy Tính >  >> Hệ thống >> Linux

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

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

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

Sử dụng grep để tìm một từ cụ thể trong tệp

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

Theo mặc định, grep tìm kiếm thông qua nội dung của tệp cũng như tên tệp của chúng. Nó được bao gồm trên phần lớn các hệ thống Linux và thường giống hệt nhau giữa các bản phân phối. Điều đó nói rằng, các hộp Linux nhỏ hơn hoặc kém mạnh hơn có thể thích chạy một lệnh khác, như ack .

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

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

-R cờ đặt grep sang chế độ đệ quy, điều hướng qua tất cả các thư mục có trong thư mục được chỉ định. -w cờ tìm kiếm cho các từ phù hợp toàn bộ. Điều này có nghĩa là "red" sẽ chỉ khớp với "red" được bao quanh bởi các ký tự khoảng trắng và không phải "dư thừa" hoặc "mệt mỏi". -e gắn cờ trước 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 grep, bạn có thể sử dụng --exclude--include cờ để giới hạn tìm kiếm đối với một số loại tệp nhất định. Ví dụ:--exclude=*.csv sẽ không tìm kiếm trong bất kỳ tệp nào có phần mở rộng .csv. --include=*.txt mặt khác, sẽ chỉ tìm kiếm trong các tệp có phần mở rộng .txt. Cờ có thể được thêm ngay sau lệnh grep, như được hiển thị bên dưới:

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

Bạn cũng có thể loại trừ các thư mục được chỉ định bằng cách làm theo định dạng bên dưới:

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

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

Sử dụng find để tìm một từ cụ thể trong tệp

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

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

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

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

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

Sử dụng ack để tìm một từ cụ thể trong tệp

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

ack 'pattern'

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

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 các tình huống, grep là công cụ tìm kiếm phổ biến rộng rãi tốt nhất. Bạn cũng có thể xem các công cụ tìm kiếm khác, như RipGrep, để có các tùy chọn tìm kiếm nhanh hơn