Tổng quan
Regex (Regular Expression) không chỉ là một công cụ đơn thuần trong hệ điều hành Linux; nó là chìa khóa mở ra khả năng tìm kiếm, thay thế và phân tích chuỗi văn bản một cách hiệu quả và linh hoạt. Với sự hỗ trợ mạnh mẽ từ các công cụ dòng lệnh như grep, sed, awk, và perl, việc sử dụng regex sẽ giúp các sysadmin không chỉ tiết kiệm thời gian mà còn tối ưu hóa hiệu suất công việc hàng ngày của họ.
RegEx không phải ngôn ngữ lập trình, nó chỉ một tập hợp các cú pháp dùng để bắt chuỗi. Nhưng nó cực kỳ phổ biến và hầu hết những ngôn ngữ lập trình nào phổ biến đều hỗ trợ hết.
Phân loại
Regex cơ bản
Một số lệnh thường được sử dụng với các biểu thức chính quy là tr, sed, vi và grep. Dưới đây là một số Regex cơ bản:
Ký hiệu | Mô tả |
. | Khớp bất kì ký tự đơn nào |
^ | Đầu chuỗi |
$ | Cuối chuỗi |
* | Khớp với 0 hoặc nhiều lần kí tự trước |
+ | Khớp với 1 hoặc nhiều lần kí tự trước |
\ | Đại diện cho kí tự đặc biệt |
() | Nhóm biểu thức chính quy |
? | Khớp tối đa 1 kí tự |
[] | Khớp với bất kì kí tự nào trong dấu ngoặc vuông |
[^] | Khớp với bất kì kí tự nào không có trong ngoặc vuông |
(abcd) | Khớp với các kí tự abcd theo một thứ tự chính xác |
Chúng ta cùng đi vào ví dụ:
Dùng lệnh cat để xem nội dung:
![](https://adminvietnam.org/wp-content/uploads/2024/05/image-51-760x330.png)
Tìm nội dung có chứa chữ cái:
![](https://adminvietnam.org/wp-content/uploads/2024/05/image-52-760x327.png)
Kí tự ‘^’ tìm kiếm kí tự bắt đầu của một chuỗi, chỉ các dòng bắt đầu bằng ký tự được tìm kiếm. Các dòng không chứa ký tự ‘a’ khi bắt đầu sẽ bị bỏ qua.
![](https://adminvietnam.org/wp-content/uploads/2024/05/image-53-760x341.png)
Kí tự ‘$’ tìm kiếm kí tự cuối của một chuỗi. Sử dụng ‘$’ chỉ chọn những dòng được kết thúc bằng kí tự ‘n’
![](https://adminvietnam.org/wp-content/uploads/2024/05/image-54-760x275.png)
Dùng kí tự ‘.’ để tìm kiếm thay thế khí tự đứng trước hoặc đướng sau ki tự cần tìm.
![](https://adminvietnam.org/wp-content/uploads/2024/05/image-55-760x357.png)
Regax Interval
Những biểu thức này cho chúng ta biết về số lần xuất hiện của một ký tự trong một chuỗi.
Kí hiệu | Mô tả |
{n} | Khớp với ký tự xuất hiện chính xác ‘n’ lần |
{n, m} | Khớp với ký tự xuất hiện ‘n’ lần nhưng không quá m |
{n,} | Chỉ khớp với ký tự khi nó xuất hiện ‘n’ lần trở lên |
Chúng ta cùng đi vào ví dụ:
Kiểm tra xem ký tự ‘a’ xuất hiện chính xác 2 lần trong một chuỗi lần lượt
![](https://adminvietnam.org/wp-content/uploads/2024/05/image-56-760x349.png)
Ví dụ: Chúng ta thực hiện biểu thức chính quy sau [0..9]{1,3} để lọc ra các số ghép ít nhất 1 chữ số nhưng không quá 3 trong phạm vi từ 0 đến 9.
![](https://adminvietnam.org/wp-content/uploads/2024/05/image-58-760x483.png)
Regex mở rộng
Kí tự | Mô 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 |
Chúng ta cùng đi vào ví dụ:
Tìm kiếm tất cả các ký tự ‘n’
![](https://adminvietnam.org/wp-content/uploads/2024/05/image-60-760x282.png)
Chúng ta muốn lọc ra các dòng trong đó ký tự ‘v’ đứng trước ký tự ‘n’
![](https://adminvietnam.org/wp-content/uploads/2024/05/image-66-760x246.png)
Cú pháp cho phần mở rộng là dấu ngoặc {} và 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ằng hai dấu chấm “..”
Ví dụ: Lệnh echo tạo chuỗi bằng cách sử dụng mở rộng dấu ngoặc.
![](https://adminvietnam.org/wp-content/uploads/2024/05/image-65-760x394.png)
Cảm ơn bạn đã đọc bài viết này. Nếu bạn có bất kỳ câu hỏi hoặc ý kiến đóng góp, đừng ngần ngại để lại bình luận bên dưới. Chúng ta hãy tiếp tục chia sẻ kiến thức và học hỏi từ nhau.