Hướng dẫn sử dụng lệnh fgrep của Linux dành cho người mới bắt đầu (có ví dụ)

theanh

Administrator
Nhân viên
Trong khi grep là một lệnh Linux nổi tiếng (chúng tôi đã đề cập chi tiết), bạn có biết rằng có hai biến thể khác nhau của công cụ này không? Có, đó là egrepfgrep. Trong hướng dẫn này, chúng tôi sẽ thảo luận về biến thể sau (fgrep) bằng các ví dụ dễ hiểu. Nhưng trước khi làm điều đó, cần đề cập rằng tất cả các ví dụ và hướng dẫn được đề cập trong hướng dẫn này đều đã được thử nghiệm trên Ubuntu 16.04LTS.

Lệnh fgrep của Linux​

Nếu bạn xem tài liệu chính thức, trang hướng dẫn cho lệnh grep cho biết fgrep không gì khác ngoài grep -F. Nó cũng cho biết các biến thể như fgrep và egrep chỉ được cung cấp để tương thích ngược. Chúng ta sẽ đề cập đến những chi tiết này sau trong hướng dẫn này.

Trong khi đó, đây là cú pháp của fgrep (giống như cú pháp của grep):
Mã:
grep [OPTIONS] PATTERN [FILE...]
Và đây là cách trang hướng dẫn lệnh grep giải thích về công cụ này:
Mã:
grep tìm kiếm các FILE đầu vào được đặt tên để tìm các dòng có chứa nội dung khớp với PATTERN đã cho. Nếu không có tệp nào 
được chỉ định hoặc nếu tệp “-” được cung cấp, grep sẽ tìm kiếm đầu vào chuẩn. Theo mặc định, grep sẽ in 
các dòng khớp.
Các ví dụ theo kiểu Hỏi & Đáp sau đây sẽ giúp bạn hiểu rõ hơn về cách fgrep hoạt động.

Câu hỏi 1. fgrep khác với grep và egrep như thế nào?​

Lệnh fgrep khác với cả grep và egrep ở chỗ nó diễn giải PATTERN là danh sách các chuỗi cố định (thay vì các biểu thức chính quy), được phân tách bằng các dòng mới.

Vì nó được cho là giống với grep -F, nên đây là cách một chuyên gia giải thích tùy chọn -F của grep tại StackExchange:
Mã:
Công tắc [ICODE]-F[/ICODE] chuyển grep sang một chế độ khác, trong đó nó chấp nhận một mẫu để khớp, nhưng sau đó 
chia mẫu đó thành một chuỗi tìm kiếm trên mỗi dòng và thực hiện tìm kiếm OR trên bất kỳ chuỗi nào 
mà không thực hiện bất kỳ khớp mẫu đặc biệt nào.

Câu hỏi 2. Làm thế nào để sử dụng fgrep?​

Để hiểu cách sử dụng fgrep, trước tiên chúng ta hãy lấy một ví dụ cơ bản. Giả sử có một tệp (file1) chứa các nội dung sau:



Và có một tệp khác (words.txt) chứa danh sách các từ mà chúng ta muốn tìm kiếm trong file1.



Vì vậy, đây là cách bạn có thể sử dụng fgrep để thực hiện tìm kiếm này:
Mã:
fgrep -f words.txt file1


Vì vậy, bạn có thể thấy các từ được tìm thấy đã được tô sáng màu đỏ. Bây giờ một số bạn có thể cho rằng đó cũng là những gì grep và egrep sẽ làm trong trường hợp này, vậy fgrep khác nhau như thế nào?

Đầu tiên, đúng, bạn đúng. Lệnh grep và egrep cũng sẽ tạo ra kết quả tương tự:



Nhưng sự khác biệt sẽ rõ ràng trong trường hợp file1 và words.txt chứa các nội dung sau (lưu ý các ký tự đặc biệt trong các từ):



Ở đây, egrep và grep sẽ không tìm thấy tất cả các từ:



Nhưng fgrep sẽ hoạt động như mong đợi:




Câu hỏi 3. Có thực sự không có sự khác biệt nào giữa fgrep và grep không?​

Theo tài liệu chính thức, không có bất kỳ sự khác biệt nào giữa fgrep và lệnh grep -F. Tuy nhiên, có thông tin cho rằng có một sự khác biệt chính giữa hai công cụ: thuật toán khớp chuỗi mà chúng sử dụng. Trong khi fgrep sử dụng thuật toán Aho-Corasick, grep sử dụng một phiên bản đã sửa đổi của Commentz-Walter.

"Điều này có nghĩa là grep có độ phức tạp tệ nhất là O(mn) trong khi fgrep tệ nhất là O(m+n)," một chuyên gia trên diễn đàn StackExchange cho biết.

Kết luận​

Rõ ràng là lệnh fgrep không khó hiểu và sử dụng. Về sự khác biệt giữa fgrep và grep -F, mặc dù chúng tôi đã ghi chú các điểm trong Q3, chúng tôi nghĩ rằng vấn đề này không nên làm phiền một bộ phận lớn người dùng. Trong trường hợp bạn còn nghi ngờ hoặc có thắc mắc liên quan đến fgrep, hãy chia sẻ với chúng tôi bằng cách để lại bình luận bên dưới.
 
Back
Bên trên