Bạn đang tìm kiếm một công cụ tìm kiếm văn bản mạnh mẽ và linh hoạt trong hệ thống Linux? grep
, egrep
và fgrep
chính là những lựa chọn tuyệt vời. Mỗi công cụ này có những đặc điểm riêng, giúp bạn tìm kiếm thông tin một cách chính xác và hiệu quả. Vậy, đâu là công cụ phù hợp nhất với nhu cầu của bạn? Hãy cùng khám phá!
Sự khác biệt giữa grep, egrep và fgrep trong Linux
Một số ký tự meta đặc biệt của grep
+
– Tương đương với một hoặc nhiều lần xuất hiện của ký tự trước đó.
?
– Điều này chỉ ra gần như 1 lần lặp lại của ký tự trước đó. Ví dụ: a?
sẽ phù hợp với 'a' hoặc 'aa'.
(
– Bắt đầu biểu thức sự lựa chọn.
)
– Kết thúc biểu thức sự lựa chọn.
|
– So khớp với bất kỳ biểu thức nào được phân tách bởi '|'
. Ví dụ: “(a|b)cde”
sẽ phù hợp với 'abcde' hoặc 'bbcde'.
{
– Meta-ký tự này chỉ ra sự xác định của phạm vi. Ví dụ: “a{2}”
phù hợp với “aa” trong file.
}
– Meta-ký tự này chỉ ra kết thúc của phạm vi.
Sự khác biệt giữa egrep, fgrep và grep
Một số khác biệt chính giữa grep, egrep và fgrep có thể được nhấn mạnh như sau. Đối với tập hợp các ví dụ này, chúng tôi giả định file đang thực hiện thao tác là:
Lệnh Linux grep
Grep Command
grep hoặc Global Regular Expression Print là chương trình tìm kiếm chính trên các hệ thống Unix-like có thể tìm kiếm bất kỳ loại chuỗi nào trên bất kỳ file hoặc danh sách file hoặc thậm chí đầu ra của bất kỳ lệnh nào.
Nó sử dụng Basic Regular Expressions ngoài chuỗi thông thường như một mẫu tìm kiếm. Trong Basic Regular Expressions (BRE), các meta-ký tự như: '{','}'
,'(',')'
,'|'
,'+'
,'?'
mất đi ý nghĩa của chúng và được coi như là các ký tự thông thường của chuỗi và cần được thoát nếu muốn coi chúng như các ký tự đặc biệt.
Ngoài ra, grep sử dụng thuật toán Boyer-Moore để tìm kiếm nhanh bất kỳ chuỗi hoặc biểu thức chính quy nào.
$ grep -C 0 '(f|g)ile' check_file
$ grep -C 0 '\(f\|g\)ile' check_file
Ví dụ về lệnh Linux grep
Như ở đây, khi chạy lệnh mà không thoát '(' ')'
và '|'
thì nó sẽ tìm kiếm chuỗi hoàn chỉnh tức là “(f|g)ile”
trong file. Nhưng khi những ký tự đặc biệt này được thoát, thay vì coi chúng là một phần của chuỗi, grep coi chúng là các meta-ký tự và tìm kiếm các từ “file”
hoặc “gile”
trong file.
Egrep Command
Egrep hoặc grep -E là một phiên bản khác của grep hoặc grep mở rộng. Phiên bản này của grep hiệu quả và nhanh chóng khi tìm kiếm một mẫu biểu thức chính quy vì nó coi các meta-ký tự như là nó và không thay thế chúng bằng chuỗi như trong grep, và do đó bạn được giải phóng khỏi công cuộc thoát chúng như trong grep. Nó sử dụng ERE hoặc Bộ biểu thức chính quy mở rộng.
Trong trường hợp của egrep, ngay cả khi bạn không thoát các meta-ký tự, nó sẽ coi chúng là các ký tự đặc biệt và thay thế chúng bằng ý nghĩa đặc biệt của chúng thay vì coi chúng là một phần của chuỗi.
$ egrep -C 0 '(f|g)ile' check_file
$ egrep -C 0 '\(f\|g\)ile' check_file
Ví dụ lệnh Linux egrep
fgrep Command
Fgrep hoặc grep -F là một phiên bản khác của grep nhanh chóng khi tìm kiếm cả chuỗi mà không phân biệt biểu thức chính quy vì nó không nhận ra biểu thức chính quy, cũng như bất kỳ meta-ký tự nào. Đối với việc tìm kiếm bất kỳ chuỗi trực tiếp nào, đây là phiên bản grep nên được lựa chọn.
Fgrep tìm kiếm chuỗi hoàn chỉnh và không nhận ra các ký tự đặc biệt như một phần của biểu thức chính quy kể cả khi thoát hoặc không thoát.
$ fgrep -C 0 '(f|g)ile' check_file
$ fgrep -C 0 '\(f\|g\)ile' check_file
Ví dụ lệnh Linux fgrep
Giống như, khi các meta-ký tự không được thoát, fgrep tìm kiếm chuỗi hoàn chỉnh “(f|g)ile”
trong file, và khi các meta-ký tự đã được thoát, lệnh fgrep tìm kiếm “\(f\|g\)ile”
tất cả các ký tự như là trong file.
Chúng tôi đã bao gồm một số ví dụ về lệnh grep có thể thực hiện đọc tại đây, nếu bạn muốn tìm hiểu thêm về lệnh grep trong Linux.
Các khác biệt được nhấn mạnh trên đây là khác biệt giữa grep command, egrep và fgrep. Ngoài sự khác biệt trong tập hợp các biểu thức chính quy được sử dụng và tốc độ thực hiện, các tham số dòng lệnh còn lại giữ nguyên cho tất cả ba phiên bản của grep và thậm chí thay vì 'egrep' hoặc 'fgrep', 'grep -E' hoặc 'grep -F' được đề xuất sử dụng.