Hướng dẫn dùng biểu thức chính quy với grep trong Linux
Giới thiệu
Biểu thức chúng quy là một nhóm các ký tự, ký hiệu giúp chúng ta có thể tìm kiếm dữ liệu và khớp các mẫu phức tạo. Chúng được sử dùng nhiều trong các lệnh Linux như: grep, sed, bash..., trong bài viết này chúng ta sẽ tìm hiểu chúng với grep.
Các loại biểu thức chính quy
Biểu thức chính quy cơ bản
Biểu thưc chính quy khoảng
Biểu thức chính quy mở rộng
Toán tử biểu thức chính quy
Ký hiệu | Mô tả |
---|---|
. |
Khớp bất kỳ kí tự đơn nào. |
? |
khớp tối đa 1 kí tự. |
* |
Khớp với 0 hoặc nhiều lần ký tự trước. |
+ |
Khớp với một hoặc nhiều lần xuất hiện của ký tự trước |
{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 |
- |
Đại diện cho phạm vi nếu nó không phải là đầu tiên hoặc cuối cùng trong danh sách. |
$ |
Khớp với ký tự cuối chuỗi. |
^ |
Khớp với ký tự dầu chuỗi. |
\b |
Khớp với chuỗi trống ở cạnh của một từ |
\B |
Khớp với chuỗi trống miễn là nó không ở cạnh của một từ. |
\< |
Khớp chuỗi trống ở đầu từ. |
\> |
Khớp chuỗi trống ở cuối từ. |
Ví dụ biểu thức chính quy
Cách ghép các ký tự đơn.
Ký tự dấu chấm .
khớp với bất kỳ một ký tự nào.
Chúng ta có tệp 123host.txt
như sau:
Chúng ta tìm kiếm chuỗi bắt đầu bằng purchase
.
Chúng ta tìm kiếm chuỗi bắt đầu bằng purchase
và theo sau là một ký tự khác.
Cuối cùng chúng ta tìm kiếm chuỗi bắt đầu bằng purchase
nhưng kết thúc bằng db
.
Cách khớp chỉ dấu chấm.
Dấu chấm có một ý nghĩa đặc biệt trong regex, tức là khớp với một ký tự bất kỳ nào. Nhưng nếu chúng ta chỉ cần khớp dấu chấm .
thay vì ý nghĩa đặc biệt regex. Chúng ta cần đặt trước nó một dấu gạch chéo ngược \
.
Ví dụ:
Neo.
Chúng ta có thể sử dụng ^
và $
để buộc regex chỉ khớp ở đầu hoặc cuối dòng tương ứng.
Ví dụ chúng ta cần tìm chuỗi bắt đầu bằng 123
trong file 123host.txt
.
Ví dụ chúng ta cần tìm chuỗi kết thúc bằng vn
trong file 123host.txt
.
Chúng ta có thể chỉ hiển thị host
nhưng không hiển thị hosting
, 123host
... như sau:
Chúng ta có thể tìm kiếm dòng chỉ chưa nội dung host
như sau:
Chúng ta có thể tìm các dòng trống như sau:
Cách ghép các bộ ký tự.
Dấu chấm .
khớp với bất kỳ ký tự đơn lẻ nào, Chúng ta có thể khớp với các ký tự và phạm vi ký tự cụ thể bằng cách sử dụng cú pháp [..]
Ví dụ chúng ta cần tìm host
hoặc Host
như sau:
Chúng ta cũng có thể khớp số và ký tự hoa, ký tự thường. Như ví dụ chúng ta chỉ khớp với host1
Host2
.
Chúng ta cũng có thể khớp 2 số, ví dụ như host10
host11
như sau:
Chúng ta không bị giới hạn bởi chữ số và khớp ít nhất một ký tự như sau:
Trong một biểu thức, tên của một lớp ký tự được đặt trong “[[:” và “:]]” là viết tắt của danh sách tất cả các ký tự thuộc lớp đó. Tên lớp ký tự tiêu chuẩn là:
[[:alnum:]] – Thuộc chữ cái-số [a-z A-Z 0-9]
[[:alpha:]] – Bảng chữ cái [a-z A-Z]
[[:blank:]] – Bảng chữ cái [a-z A-Z]
[[:digit:]] – Các số [0-9] ‘0 1 2 3 4 5 6 7 8 9’
[[:lower:]] – Các ký tự viết thường [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'
[[:space:]] – Khoảng trống trắng
[[:upper:]] – Các ký tự viết hoa [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’
Ví dụ khớp với tất cả các chữ cái viết hoa:
Cách phủ định tất cả các phạm vi trong một tập hợp.
Ví dụ chúng ta tìm kiếm các dòng chứa chuỗi host
Host
như sau:
Chúng ta sẽ phủ định các chữ số trong chuỗi.
Ký tự đại diện.
Chúng ta có thể dùng dấu .
để đại diện cho một ký tự, trong ví dụ sau chúng ta khớp 3ký tự từ bắt đầu bằng b
và kết thúc bằng t
.
\<
: Khớp chuỗi trống ở đầu từ\>
: Khớp chuỗi trống ở cuối từ.
In tất cả các dòng có chính xác hai ký tự
Hiển thị bất kỳ dòng nào bắt đầu bằng dấu chấm và chữ số:
Cách tìm kiếm 1 mẫu có biểu tượng -
ở đầu hàng.
Tìm kiếm tất cả các dòng khớp với --test--
bằng tùy chọn -e
Nếu không có -e
, grep
sẽ cố gắng phân tích cú pháp –test–
dưới dạng danh sách các tùy chọn.
Cách dùng |
làm hoặc
với grep
.
Ví dụ để tìm hosting
hoặc server
trong file 123host.txt
chúng ta dùng lệnh như sau:
Cách dùng |
làm và
với grep
.
Ví dụ chúng ta muốn hiển thị các dòng chứa cả từ hosting
và cheap
trong file 123host.txt
chúng ta sử dụng lệnh như sau:
Cách kiểm tra sự liên tục của ký tự.
Chúng ta có thể kiểm tra tần suất một ký tự được lặp lại theo trình tự với cú pháp như sau:
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ụ khớp với ký tự v
2 lần.
Ví dụ sau sẽ khớp với cả hai từ "col" và "cool".
Ví dụ tiếp theo chúng sẽ khớp với bất kỳ hàng nào có ít nhất 3 chữ cái ‘c’.
Tổng kết
Chúng ta đã kêt thúc bài hướng dẫn dùng biểu thức chính quy với grep trong Linux. Hy vọng qua bài nãy sẽ giúp các bạn hiểu hơn về biểu thức chính quy và cách dùng với grep trong Linux.
Tính năng đang được phát triển