CƠ BẢN VỀ CHỨNG CHỈ LPI - Trang 34

3.1 Biểu thức chính quy

25

3.1.7

Sử dụng [ˆ]

Bạn có thể đảo ngược ý nghĩa của dấu ngoặc vuông bằng cách đặt một \^{} ngay sau [.
Trong trường hợp này, dấu ngoặc đơn sẽ tìm tương ứng bất kỳ ký tự nào mà không được liệt
kê trong chúng. Nhắc lại lần nữa, chú ý rằng chúng ta dùng [\^{}] với biểu thức chính
quy, nhưng [!] với "glob":

$ grep dev.hda[^{}12] /etc/fstab

/dev/hda3

/

reiserfs noatime,ro 1 1

#/dev/hda4 /mnt/extra reiserfs noatime,rw 1 1

3.1.8

Cú pháp khác

Cần biết rằng cú pháp bên trong ngoặc vuông khác cơ bản với những phần khác của biểu
thức chính quy. Ví dụ, nếu bạn đặt một . bên trong ngoặc vuông, nó cho phép ngoặc vuông
tìm tương ứng một ký tự thường ., giống như 1 và 2 trong ví dụ trên. Để so sánh, một ký tự .
ngoài ngoặc vuông được biên dịch như một ký tự mêta trừ khi đặt sau một $\backslash$.
Chúng ta có thể lợi dụng điều này để in ra danh sách tất cả những dòng trong /etc/fstab mà
chứa dòng văn bản dev.hda bằng cách gõ:

$ grep dev[.]hda /etc/fstab

Một cách tương tự, có thể gõ:

$ grep "dev\.hda" /etc/fstab}

Có thể không biểu thức chính quy nào tìm thấy tương ứng trong /etc/fstab của bạn.

3.1.9

Ký tự mêta "*"

Một vài ký tự mêta tự chúng không tương ứng với bất kỳ thứ gì, nhưng thay đổi ý nghĩa của
ký tự đứng trước. Một ký tự mêta như vậy là * (dấu sao), mà được sử dụng để tìm tương ứng
không (0) hay nhiều lần lặp lại của ký tự đứng trước. Lưu ý điều đó có nghĩa rằng * có một
ý nghĩa khác trong regex so với trong glob. Đây là một số ví dụ, và cần quan tâm tới những
trường hợp cá biệt khi regex khác với glob:

• ab*c tương ứng abbbbc nhưng không tương ứng abqc (Nếu là glob, nó sẽ tương

ứng cả hai chuỗi – bạn có thể đoán ra tại sao không?)

• ab*c tương ứng abc nhưng không tương ứng abbqbbc (nhắc lại, nếu một glob, nó

sẽ tương ứng cả hai)

• ab*c tương ứng ac nhưng không tương ứng cba (nếu một glob, nó sẽ không tương

ứng cả ac và ba|)

• b[cq]*e tương ứng bqe và be (nếu một glob, nó sẽ tương ứng bqe nhưng be thì

không)