20 ví dụ về egrep command của Linux

Tóm tắt: Trong hướng dẫn này, chúng ta sẽ thảo luận về một số ví dụ thực tế của egrep command. Sau khi làm theo hướng dẫn này, người dùng sẽ có thể thực hiện tìm kiếm văn bản hiệu quả hơn trên Linux.

Bạn đã bao giờ cảm thấy frustrate vì không tìm thấy thông tin cần thiết trong các bản ghi? Trích xuất thông tin cần thiết từ một tập dữ liệu lớn là một nhiệm vụ phức tạp và tốn thời gian.

Việc trở nên thực sự khó khăn nếu hệ điều hành không cung cấp các công cụ phù hợp và đây là lúc Linux đến để giải cứu bạn. Linux cung cấp các tiện ích lọc văn bản khác nhau như awk, sed, cut, v.v.

Tuy nhiên, egrep là một trong những tiện ích mạnh mẽ và phổ biến nhất để xử lý văn bản trên Linux, và chúng ta sẽ thảo luận về một số ví dụ của lệnh egrep.

egrep command trên Linux được nhận dạng bởi họ lệnh grep, được sử dụng để tìm kiếm và khớp một mẫu cụ thể trong các tệp tin. Nó hoạt động tương tự như grep -E (grep Extended regex) nhưng hầu hết là tìm kiếm một tệp tin cụ thể hoặc thậm chí từng dòng tìm kiếm hoặc in ra dòng trong tệp tin đã cho.

Cú pháp của lệnh egrep như sau:

$ egrep [OPTIONS] PATTERNS [FILES]

Hãy tạo một tệp văn bản mẫu với nội dung sau để sử dụng làm ví dụ:

$ cat sample.txt
Sample Text File
Tệp văn bản mẫu

Ở đây, chúng ta có thể thấy rằng tệp văn bản đã sẵn sàng. Bây giờ hãy thảo luận về một số ví dụ phổ biến thường được sử dụng hàng ngày.

1. Cách tìm mẫu trong một tệp

Hãy bắt đầu với một ví dụ đơn giản về khớp mẫu, trong đó chúng ta có thể sử dụng lệnh sau để tìm kiếm một chuỗi "professional" trong tệp tin "sample.txt":

$ egrep professionals sample.txt
Search for String in File
Tìm kiếm chuỗi trong tệp

Ở đây, chúng ta có thể thấy rằng lệnh in ra dòng chứa mẫu được chỉ định.

2. Cách đánh dấu các mẫu phù hợp trong tệp

Chúng ta có thể làm cho kết quả in ra có ý nghĩa hơn bằng cách làm nổi bật mẫu khớp. Để làm được điều này, chúng ta có thể sử dụng tùy chọn --color của lệnh egrep. Ví dụ, lệnh dưới đây sẽ làm nổi bật văn bản "professionals" với màu đỏ:

$ egrep --color=auto professionals sample.txt
Highlight Text in File
Đánh dấu văn bản trong tệp

Ở đây, chúng ta có thể thấy rằng đầu ra giống như đầu ra trước đó nhưng có thêm thông tin và chúng ta dễ dàng nhận ra từ "professionals" được lặp lại hai lần.

Trên hầu hết các hệ thống Linux, thiết lập trên được kích hoạt theo mặc định bằng cách sử dụng biệt danh sau:

$ alias egrep='egrep –color=auto'

3. Cách tìm mẫu trong nhiều tệp

Lệnh egrep chấp nhận nhiều tệp tin như một đối số, cho phép chúng ta tìm kiếm mẫu cụ thể trong nhiều tệp tin. Hãy hiểu điều này qua một ví dụ.

Trước tiên, hãy tạo bản sao của tệp tin "sample.txt":

$ cp sample.txt sample-copy.txt

Bây giờ, tìm kiếm mẫu "professionals" trong cả hai tệp tin:

$ egrep professionals sample.txt sample-copy.txt 
Search for String in Multiple Files
Tìm kiếm chuỗi trong nhiều tệp

Trong ví dụ trên, chúng ta có thể thấy tên tệp tin trong đầu ra, đại diện cho dòng khớp từ tệp tin đó.

4. Cách đếm các dòng trùng khớp trong tệp

Đôi khi chúng ta chỉ cần tìm hiểu xem mẫu có tồn tại trong tệp hay không. Nếu có thì có bao nhiêu dòng chứa mẫu? Trong những trường hợp như vậy, chúng ta có thể sử dụng tùy chọn -c của lệnh.

Ví dụ, lệnh dưới đây sẽ hiển thị số 1, vì từ "professionals" chỉ xuất hiện trong một dòng duy nhất.

$ egrep -c professionals sample.txt

1

5. Cách chỉ in các dòng phù hợp trong tệp

Trong ví dụ trước đó, chúng ta đã thấy tùy chọn -c không tính số lần xuất hiện của mẫu. Ví dụ, từ "professionals" xuất hiện hai lần trong cùng một dòng nhưng tùy chọn -c chỉ coi nó là một khớp duy nhất.

Trong những trường hợp như vậy, chúng ta có thể sử dụng tùy chọn -o của lệnh để chỉ in ra mẫu khớp. Ví dụ, lệnh dưới đây sẽ chỉ in ra từ "professionals" trên hai dòng riêng biệt:

$ egrep -o professionals sample.txt

Bây giờ, hãy đếm số dòng bằng lệnh wc:

$ egrep -o professionals sample.txt | wc -l
Print Matched Lines in File
In các dòng khớp trong tệp

Trong ví dụ trên, chúng ta đã sử dụng sự kết hợp của các lệnh egrep và wc để đếm số lần xuất hiện của mẫu cụ thể.

6. Cách tìm mẫu bằng cách bỏ qua chữ hoa chữ thường

Mặc định, egrep thực hiện khớp mẫu một cách phân biệt chữ hoa chữ thường. Điều này có nghĩa là các từ – we, We, wE và WE được coi là các từ khác nhau. Tuy nhiên, chúng ta có thể thực hiện tìm kiếm không phân biệt chữ hoa chữ thường bằng cách sử dụng tùy chọn -i.

Ví dụ, trong lệnh dưới đây, mẫu khớp sẽ thành công cho văn bản we và We:

$ egrep -i we sample.txt 
Search Case Insensitive String
Tìm kiếm chuỗi không phân biệt chữ hoa chữ thường

7. Cách loại trừ các mẫu khớp một phần

Trong ví dụ trước đó, chúng ta đã thấy rằng lệnh egrep thực hiện khớp mẫu một phần. Ví dụ, khi chúng ta tìm kiếm văn bản we thì khớp mẫu thành công cho các văn bản khác như web, website và were.

Để khắc phục hạn chế này, chúng ta có thể sử dụng tùy chọn -w, áp đặt khớp toàn bộ từ.

$ egrep -w we sample.txt
Print Only Matched Patterns in File
Chỉ in các mẫu phù hợp trong tệp

8. Cách đảo ngược việc khớp mẫu trong tệp

Cho đến nay, chúng ta đã sử dụng lệnh egrep để in ra những dòng trong đó mẫu cụ thể hiện diện. Tuy nhiên, đôi khi chúng ta muốn thực hiện thao tác theo cách ngược lại.

Ví dụ, chúng ta có thể muốn in ra các dòng không chứa mẫu cụ thể. Chúng ta có thể làm điều này với sự trợ giúp của tùy chọn -v:

$ egrep -v we sample.txt
Invert Pattern Matching in File
Đảo ngược mẫu khớp trong tệp

Ở đây, chúng ta có thể thấy rằng lệnh in ra tất cả các dòng không chứa văn bản we.

9. Cách tìm số dòng của mẫu

Chúng ta có thể sử dụng tùy chọn -n của lệnh để bật đánh số dòng, cho phép hiển thị số dòng trong đầu ra khi khớp mẫu thành công. Trích xuất này làm cho đầu ra có ý nghĩa hơn.

$ egrep -n professionals sample.txt
Print Line Number of Matched Pattern
In số dòng của mẫu phù hợp

Trong đầu ra trên, chúng ta có thể thấy từ "professionals" hiện diện trong dòng thứ 5.

10. Cách thực hiện khớp mẫu ở chế độ im lặng

Trong chế độ yên tĩnh, lệnh egrep không in ra mẫu khớp. Vì vậy, chúng ta phải sử dụng giá trị trả về của lệnh để xác định xem việc khớp mẫu có thành công hay không.

Chúng ta có thể sử dụng tùy chọn -q của lệnh để bật chế độ yên tĩnh, điều này hữu ích khi viết các kịch bản shell.

$ egrep -q professionals sample.txt
$ egrep -q non-existing-pattern sample.txt
Search Pattern Matching in Quiet Mode
So khớp mẫu tìm kiếm ở chế độ im lặng

Trong ví dụ này, giá trị trả về là không (zero) đại diện cho sự có mặt của mẫu trong khi giá trị khác không đại diện cho sự vắng mặt của mẫu.

11. Cách hiển thị các dòng trước khi khớp mẫu

Đôi khi, việc hiển thị một số dòng xung quanh mẫu khớp cũng có ý nghĩa. Đối với những tình huống như vậy, chúng ta có thể sử dụng tùy chọn -B của lệnh, hiển thị N dòng trước mẫu khớp.

Ví dụ, lệnh dưới đây sẽ in ra dòng cho mà khớp mẫu thành công và 2 dòng trước đó.

$ egrep -B 2 -n professionals sample.txt 
Print Lines Before Pattern Match
In dòng trước khi khớp mẫu

Trong ví dụ này, chúng ta đã sử dụng tùy chọn -n để hiển thị số dòng.

12. Cách hiển thị các dòng sau khi khớp mẫu

Một cách tương tự, chúng ta có thể sử dụng tùy chọn -A của lệnh để hiển thị các dòng sau mẫu khớp. Ví dụ, lệnh dưới đây sẽ in ra dòng cho mà khớp mẫu thành công và 2 dòng tiếp theo.

$ egrep -A 2 -n professionals sample.txt
Print Lines After Pattern Match
In dòng sau khi khớp mẫu

13. Cách hiển thị các đường xung quanh mẫu khớp

Ngoài ra, lệnh egrep hỗ trợ tùy chọn -C, kết hợp chức năng của các tùy chọn -A và -B, hiển thị các dòng đứng trước và sau mẫu khớp.

$ egrep -C 2 -n professionals sample.txt 
Print Lines Around Pattern Match
In các dòng xung quanh mẫu khớp

14. Cách tìm mẫu trong nhiều tệp theo cách đệ quy

Như đã thảo luận trước đây, chúng ta có thể thực hiện khớp mẫu trên nhiều tệp tin. Tuy nhiên, tình huống trở nên rắc rối khi các tệp tin được chứa trong nhiều thư mục con và chúng ta truyền toàn bộ chúng như là đối số lệnh.

Trong những trường hợp như vậy, chúng ta có thể thực hiện khớp mẫu một cách đệ quy bằng cách sử dụng tùy chọn -r như được thể hiện trong ví dụ dưới đây.

Trước tiên, hãy tạo 2 thư mục con và sao chép tệp tin "sample.txt" vào chúng:

$ mkdir -p dir1/dir2
$ cp sample.txt dir1/
$ cp sample.txt dir1/dir2/

Bây giờ, chúng ta hãy thực hiện thao tác tìm kiếm theo cách đệ quy:

$ egrep -r professionals dir1
Search String Recursively in Files
Tìm kiếm chuỗi đệ quy trong tệp

Trong ví dụ trên, chúng ta có thể thấy rằng khớp mẫu thành công cho các tập tin "dir1/dir2/sample.txt" và "dir1/sample.txt".

15. Cách so khớp một ký tự bằng biểu thức chính quy

Chúng ta có thể sử dụng dấu chấm (.) để khớp với bất kỳ ký tự đơn nào, ngoại trừ kết thúc dòng. Ví dụ, biểu thức chính quy dưới đây khớp với văn bản har, hat và has:

$ egrep "ha." sample.txt
Match Single Character in File
Khớp một ký tự trong tệp

16. Cách khớp 0 hoặc nhiều lần xuất hiện của ký tự

Chúng ta có thể sử dụng dấu sao (*) để khớp với không hoặc nhiều lần xuất hiện của ký tự trước đó. Ví dụ, biểu thức chính quy dưới đây khớp với văn bản chứa chuỗi we và sau đó là không hoặc nhiều lần xuất hiện của ký tự b.

$ egrep "web*" sample.txt
Match String in Text File
So khớp chuỗi trong tệp văn bản

17. Cách khớp một hoặc nhiều lần xuất hiện của ký tự trước đó

Chúng ta có thể sử dụng dấu cộng (+) để khớp với một hoặc nhiều lần xuất hiện của ký tự trước đó. Ví dụ, biểu thức chính quy dưới đây khớp với văn bản chứa chuỗi we sau đó là ít nhất một lần xuất hiện của ký tự b.

$ egrep "web+" sample.txt
Match String by Character in File
Khớp chuỗi theo ký tự trong tệp

Ở đây, chúng ta có thể thấy rằng khớp mẫu không thành công cho các từ – we và were, do không có ký tự b.

18. Cách so khớp điểm bắt đầu của dòng

Chúng ta có thể sử dụng dấu nhân (^) để đại diện cho đầu dòng dữ liệu. Ví dụ, biểu thức chính quy dưới đây sẽ in ra các dòng bắt đầu bằng văn bản We:

$ egrep "^We" sample.txt
Print Matched Text with Start Line
In văn bản phù hợp với dòng bắt đầu

19. Cách nối phần cuối của dòng

Chúng ta có thể sử dụng dấu dolla ($) để đại diện cho cuối dòng dữ liệu. Ví dụ, biểu thức chính quy dưới đây sẽ in ra các dòng kết thúc bằng văn bản e:

$ egrep "e.$" sample.txt
Print Matched Text with End Line
In văn bản phù hợp với dòng cuối

20. Cách xóa dòng trống trong tệp

Chúng ta có thể sử dụng dấu caret (^) ngay sau đó là dấu dollar ($) để đại diện cho dòng trống. Hãy sử dụng điều này trong biểu thức chính quy để loại bỏ các dòng trống:

$ egrep -n -v "^$" sample.txt
Remove Empty Lines in File
Xóa các dòng trống trong tệp

Trong đầu ra trên, chúng ta có thể thấy rằng dòng số 2, 4, 6, 8 và 10 không được hiển thị vì chúng rỗng.

Trong bài viết này, chúng ta đã thảo luận về một số ví dụ hữu ích của egrep command. Những ví dụ này có thể được sử dụng trong cuộc sống hàng ngày để nâng cao năng suất làm việc.