Hướng dẫn biểu thức chính quy Linux: Ví dụ về Regex Grep

⚡ Tóm tắt thông minh

Biểu thức chính quy trong Linux là các chuỗi ký tự đặc biệt dùng để tìm kiếm dữ liệu và khớp các mẫu phức tạp trên các công cụ như grep, sed và vi, sử dụng các dạng cơ bản, khoảng, mở rộng và mở rộng dấu ngoặc nhọn để lọc văn bản một cách chính xác.

  • 🔎 Chúng là gì: Biểu thức chính quy, viết tắt là regexp hoặc regex, mô tả các mẫu văn bản để tìm kiếm và đối sánh.
  • 🧩 Bộ cơ bản: Các ký hiệu như . ^ $ * và \ dùng để neo, lặp lại và thoát các ký tự trong một mẫu.
  • 🔢 Khoảng thời gian: Dấu ngoặc nhọn như {n} và {n,m} kiểm soát số lần lặp lại của ký tự đứng trước nó.
  • Đa thế hệ: Với lệnh grep -E, \+ và \? khớp với các lần xuất hiện một hoặc nhiều lần và không hoặc một lần của một ký tự.
  • 🧵 Mở rộng nẹp: Dấu ngo ngoặc nhọn tạo ra nhiều chuỗi từ một dãy số hoặc một danh sách được phân tách bằng dấu phẩy.
  • 🛠️ Nơi sử dụng: Các công cụ như grep, sed, tr và vi dựa vào biểu thức chính quy để lọc văn bản.
  • 🤖 Hỗ trợ từ AI: Các trợ lý AI và GitHub Copilot có thể tạo, giải thích và gỡ lỗi các mẫu biểu thức chính quy một cách nhanh chóng.

Biểu thức chính quy Linux với grep — ví dụ về biểu thức chính quy cơ bản, khoảng và mở rộng

Biểu thức chính quy là một trong những tính năng mạnh mẽ nhất của Linux Các công cụ xử lý văn bản cho phép bạn đối sánh, lọc và chuyển đổi dữ liệu bằng các mẫu gọn gàng. Trang này giải thích các dạng cơ bản, khoảng và mở rộng, cộng với mở rộng dấu ngoặc nhọn, kèm theo các ví dụ grep đã được thực hiện.

Biểu thức chính quy của Linux là gì?

Biểu thức chính quy trong Linux là các ký tự đặc biệt giúp tìm kiếm dữ liệu và khớp với các mẫu phức tạp. Biểu thức chính quy thường được viết tắt là 'regexp' hoặc 'regex'. Chúng được sử dụng trong nhiều chương trình Linux như... grep, bash, rename, sed, và nhiều hơn nữa.

Các loại biểu thức chính quy

Để dễ hiểu hơn, chúng ta hãy cùng tìm hiểu từng loại biểu thức chính quy một. Trang này sẽ đề cập đến các biểu thức chính quy cơ bản, khoảng và mở rộng, và kết thúc bằng việc mở rộng dấu ngoặc nhọn.

Biểu thức chính quy cơ bản

Một số lệnh thường dùng có thể sử dụng với biểu thức chính quy là tr, sed, vivà grep. Bảng dưới đây liệt kê một số biểu thức chính quy cơ bản.

Mô tả Chi tiết
. Thay thế bất kỳ ký tự nào
^ Khớp với phần đầu của một chuỗi
$ Khớp với cuối chuỗi
* Khớp với ký tự đứng trước đó không hoặc nhiều lần.
\ Biểu thị các ký tự đặc biệt
() Nhóm biểu thức chính quy
? Khớp chính xác với một ký tự

Chúng ta hãy xem một ví dụ. Đầu tiên, chạy lệnh `cat sample` để hiển thị nội dung của một tệp tin hiện có, như hình bên dưới.

Lệnh `cat` là ví dụ hiển thị nội dung của một tệp hiện có trong terminal.

Tiếp theo, hãy tìm kiếm nội dung có chứa chữ cái 'a'. Ảnh chụp màn hình bên dưới cho thấy lệnh grep trả về mọi dòng có chứa chữ 'a'.

Tìm kiếm trong tệp mẫu các dòng chứa chữ cái a

Dấu mũ '^' khớp với vị trí bắt đầu của một chuỗi ký tự. Ví dụ bên dưới tìm kiếm nội dung bắt đầu bằng chữ cái 'a'.

Tìm kiếm với ký tự neo (^) chỉ khớp với các dòng bắt đầu bằng chữ cái a.

Chỉ những dòng bắt đầu bằng ký tự 'a' mới được lọc. Những dòng không chứa ký tự 'a' ở đầu sẽ bị bỏ qua.

Chúng ta hãy xem một ví dụ khác. Ảnh chụp màn hình bên dưới một lần nữa hiển thị nội dung của tệp mẫu trước khi lọc theo cuối dòng.

Nội dung mẫu của tập tin được hiển thị trước khi lọc các dòng kết thúc bằng chữ t.

Chỉ chọn những dòng kết thúc bằng chữ 't' bằng cách sử dụng ký hiệu '$' như hình bên dưới.

Lệnh grep với dấu neo đô la chỉ chọn các dòng kết thúc bằng chữ t.

Khoảng thời gian Biểu thức chính quy

Các biểu thức này chỉ định số lần xuất hiện của một ký tự trong một chuỗi. Chúng được liệt kê bên dưới.

Biểu hiện Mô tả Chi tiết
{N} Khớp chính xác với ký tự trước xuất hiện 'n' lần
{n, m} Khớp với ký tự trước xuất hiện 'n' lần nhưng không quá m
{N, } Chỉ khớp với ký tự trước khi nó xuất hiện 'n' lần trở lên

Ví dụ, hãy lọc ra tất cả các dòng chứa ký tự 'p'. Ảnh chụp màn hình bên dưới hiển thị các dòng phù hợp.

Sử dụng lệnh grep để lọc tập tin mẫu, tìm các dòng chứa ký tự "p".

Bây giờ hãy kiểm tra xem ký tự 'p' có xuất hiện chính xác hai lần trong một chuỗi, lần lượt từng cái một. Cú pháp để làm điều này là:

cat sample | grep -E p\{2}

Kết quả của trận đấu theo từng khoảng thời gian được hiển thị bên dưới.

grep -E interval expression matching the character p appearing exactly twice

Lưu ý: Bạn cần thêm -E với các biểu thức chính quy này.

Biểu thức chính quy mở rộng

Các biểu thức chính quy này kết hợp nhiều biểu thức lại với nhau. Một số trong đó là:

Biểu hiện Mô tả Chi tiết
\+ Khớp với một hoặc nhiều lần xuất hiện của ký tự trước đó
\? Khớp 0 hoặc một lần xuất hiện của ký tự trước đó

Ví dụ, hãy tìm kiếm tất cả các lần xuất hiện của ký tự 't'. Ảnh chụp màn hình bên dưới hiển thị kết quả.

Tìm kiếm trong tệp mẫu tất cả các dòng có chứa ký tự t

Giả sử bạn muốn lọc ra những dòng mà ký tự 'a' đứng trước ký tự 't'. Bạn có thể sử dụng lệnh như sau:

cat sample|grep "a\+t"

Kết quả được hiển thị trong ảnh chụp màn hình bên dưới.

grep biểu thức mở rộng khớp với một hoặc nhiều ký tự 'a' theo sau bởi 't'

Mở rộng nẹp

Cú pháp cho việc mở rộng dấu ngoặc nhọn là một chuỗi hoặc một danh sách các mục được phân tách bằng dấu phẩy bên trong dấu ngoặc nhọn '{}'. Các mục bắt đầu và kết thúc trong một chuỗi được phân tách bởi hai dấu chấm '..'.

Một số ví dụ được trình bày bên dưới.

Lệnh `echo` sử dụng mở rộng dấu ngoặc nhọn để tạo nhiều chuỗi từ một chuỗi ký tự và một danh sách.

Trong các ví dụ trên, lệnh echo tạo chuỗi bằng cách sử dụng mở rộng dấu ngoặc nhọn, tạo ra nhiều chuỗi từ một mẫu duy nhất.

Câu Hỏi Thường Gặp

Theo mặc định, grep sử dụng các biểu thức chính quy cơ bản. egrep cho phép sử dụng các biểu thức mở rộng (tương tự như grep -E), và fgrep khớp với các chuỗi cố định mà không cần biểu thức chính quy (grep -F). Phiên bản GNU grep hiện đại đánh dấu egrep và fgrep là lỗi thời, vì vậy nên ưu tiên sử dụng grep -E và grep -F.

Các lớp ký tự khớp với một loại ký tự. Các biểu thức ngoặc vuông như [az] khớp với một phạm vi, trong khi các lớp POSIX như [[:alpha:]], [[:digit:]] và [[:space:]] khớp với các chữ cái, số và khoảng trắng. Chúng giúp các mẫu dễ đọc và có thể sử dụng được ở các ngôn ngữ khác nhau.

Thêm tùy chọn -i, ví dụ: grep -i “hello” sample. Lệnh này khớp với Hello, HELLO và hello. Nếu không có -i, biểu thức chính quy sẽ phân biệt chữ hoa và chữ thường, do đó chữ cái viết hoa và dạng viết thường của nó được coi là hai ký tự khác nhau.

Ký tự đại diện (globbing) trong shell mở rộng tên tệp, trong đó * có nghĩa là bất kỳ ký tự nào và ? có nghĩa là một ký tự. Biểu thức chính quy khớp với văn bản bên trong tệp, trong đó * có nghĩa là không hoặc nhiều hơn một ký tự đứng trước nó. Cùng một ký hiệu có nghĩa khác nhau trong mỗi ngữ cảnh.

Sử dụng tùy chọn -o, ví dụ: grep -o “a\+t” sample. Thay vì in toàn bộ dòng, grep chỉ in phần khớp với mẫu, mỗi dòng một kết quả khớp. Điều này hữu ích cho ví dụ:traccác giá trị như email hoặc số.

Sử dụng tùy chọn thay thế với ký hiệu dấu gạch dọc. Ở chế độ mở rộng, lệnh `grep -E “cat|dog” sample` tìm kiếm các dòng chứa từ "cat" hoặc "dog". Ở chế độ cơ bản, bạn phải thoát lệnh này thành `grep “cat\|dog” sample`. Tùy chọn thay thế cho phép một lệnh tìm kiếm nhiều mẫu cùng một lúc.

Các trợ lý AI có thể chuyển đổi mô tả bằng tiếng Anh thông thường thành một biểu thức chính quy hoạt động, giải thích ý nghĩa của một mẫu khó hiểu và đề xuất cách khắc phục khi tìm thấy kết quả không khớp. Các công cụ học máy cũng phát hiện các mẫu lặp lại trong các tệp nhật ký lớn mà việc ghi chép thủ công sẽ rất tốn công.

Vâng. Trợ lý GitHub Nó gợi ý các lệnh grep và biểu thức chính quy trực tiếp từ một bình luận hoặc một phần mẫu khi bạn gõ. Điều này giúp tăng tốc độ viết các biểu thức phức tạp, tuy nhiên bạn nên kiểm tra bất kỳ mẫu nào được tạo ra với dữ liệu mẫu thực tế trước khi sử dụng chúng.

Tóm tắt bài viết này với: