Trong bài viết này giới thiệu các bạn về kiến thức regex dành cho sysadmin trên hệ điều hành Linux.
1. Regex của hệ điều hành Linux
Biểu thức chính quy là các ký tự đặc biệt giúp tìm kiếm dữ liệu, phù hợp với dữ liệu phức tạp, nó còn được gọi vắng tắt là "regex".
Biểu thức chính quy có khả năng tìm kiếm xâu ký tự mạnh mẽ cho bất cứ công cụ xử lý text nào. Tóm lại,đó là một chuỗi ký tự đặc biệt giúp xây dựng nên các mẫu tìm kiếm (searching partern).
2. Các loại regex
Chúng ta cùng tìm hiểu các loại Regex:
- regex cơ bản
- regex dạng khoảng(Interval)
- regex mở rộng
2.1. 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 nằm 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. |
(abc) | Khớp với các kí tự abc theo một thứ tự chính sác. |
Chúng ta cùng thực hiện một ví dụ:
Dùng lệnh cat
để xem nội dung của tệp hiện có
[root@test1 ~]# cat file.txt
apple
bat
ant
eat
people
taste
ball
Tìm kiếm nội dung chứa chữ 'a'.
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.
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ự 't'
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.
2.2. Regex dạng khoảng(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 |
Ví dụ:
Lọc tất cả các dòng có chứa ký tự 'p'
Chúng ta kiểm tra xem ký tự 'p' xuất hiện chính xác 2 lần trong một chuỗi lần lượt. Cú pháp sẽ là:
cat file | grep -E p\{2}
Ví dụ: Chúng ta thực hiện biểu thức chính quy sau [0-9]{2,3}
để lọc ra các số ghép ít nhất 2 chữ số nhưng không quá 3 trong phạm vi từ 0 đến 9.
Lưu ý: Chúng ta cần thêm tùy chọn -E với các regex này.
2.3. Regex mở rộng
Các biểu thức chính quy này chứa các kết hợp của nhiều biểu thức. Một số cơ bản là:
Kí hiệu | 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 |
Ví dụ:
Tìm kiếm tất cả các ký tự 't'
Chúng ta muốn lọc ra các dòng trong đó ký tự 'a' đứng trước ký tự 't'
Chúng ta sử dụng lệnh như sau:
cat file | grep "a\+t"
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ụ:
[root@test1 ~]# echo {aa,bb,cc,dd}
aa bb cc dd
[root@test1 ~]# echo {0..11}
0 1 2 3 4 5 6 7 8 9 10 11
[root@test1 ~]# echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@test1 ~]# echo a{0..10}b
a0b a1b a2b a3b a4b a5b a6b a7b a8b a9b a10b
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.