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
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
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
Đá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
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
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
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
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
Đả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
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
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
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
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
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
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
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
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
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
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
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
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.