24
Cơ bản về quản trị Linux
3.1.4
Hiểu về chuỗi con đơn giản
Nói chung, nếu bạn đang tìm một chuỗi con, bạn có thể chỉ cần văn bản nguyên dạng không
cần thêm các ký tự "đặc biệt". Bạn cần phải làm một cái gì đó đặc biệt khi chuỗi con của
bạn chứa một
+, ., *, [, ],
, trong trường hợp này những ký tự trên phải đưa vào
ngoặc kép và đặt sau gạch ngược (\). Dưới đây là một vài ví dụ chuỗi con đơn giản:
• /tmp (quét tìm dòng văn bản /tmp)
• "$\backslash$[box$\backslash$]" (quét tìm dòng văn bản [box])
• "$\backslash$*funny$\backslash$*" (quét tìm dòng văn bản *funny*)
• "ld$\backslash$.so" (quét tìm dòng văn bản ld.so)
3.1.5
Ký tự mêta
Với biểu thức chính quy, sau đây bạn có thể thực hiện những tìm kiếm phức tạp hơn ví dụ
nêu trên lợi dụng ký tự mêta
. Một trong số các ký tự mêta là . (dấu chấm câu), mà tương
ứng bất kỳ ký tự đơn nào:
$ grep dev.hda /etc/fstab
/dev/hda3
/
reiserfs noatime,ro 1 1
/dev/hda1
/boot
reiserfs noauto,noatime,notail 1 2
/dev/hda2
swap
swap
sw 0 0
#/dev/hda4 /mnt/extra reiserfs noatime,rw 1 1
Trong ví dụ này văn bản dev.hda không có trên bất kỳ dòng nào trong /etc/fstab. Tuy
nhiên, grep không quét tìm chuỗi văn bản dev.hda, mà tìm mẫu dev.hda. Nhớ rằng .
sẽ tương ứng bất kỳ ký tự đơn nào. Như bạn có thể thấy, ký tự mêta . có chức năng tương
đương với ký tự ? trong "glob".
3.1.6
Sử dụng []
Nếu chúng ta muốn tìm tương ứng một ký tự đặc biệt hơn ., chúng ta có thể sử dụng [ và ]
(dấu ngoặc vuông) để chỉ rõ một tổ hợp các ký tự cần tìm tương ứng:
$ grep dev.hda[12] /etc/fstab
/dev/hda1
/boot
reiserfs noauto,noatime,notail 1 2
/dev/hda2
swap
swap
sw 0 0
Như bạn có thể thấy, tính năng này nói riêng trùng với [] trong sự mở rộng "glob". Nhắc
lại lần nữa, đây là một trong những rắc rối khi học regex – cú pháp là giống nhau nhưng
không đồng nhất
với sự mở rộng "glob", thường làm regex rối rắm khi học.
1
Ký tự mêta là ký tự dùng để mô tả các ký tự khác - người dịch