Grep (Global Regular Expression Print) là một công cụ dòng lệnh Linux/Unix được sử dụng để tìm kiếm một chuỗi ký tự trong một tệp được chỉ định. Khi tìm thấy kết quả khớp, nó sẽ in dòng kết quả. Lệnh grep
rất tiện lợi khi tìm kiếm thông qua các tệp nhật ký lớn. Ở bài viết này, mình sẽ giới thiệu những tùy chọn hay dùng và hữu ích nhất của grep
command.
Cách sử dụng:
Cú pháp: grep [tuỳ chọn] <file>
Sau đây mình sẽ có những ví dụ để các bạn dễ hình dung và dễ hiểu hơn về lệnh grep
Mình có 2 file voivang.txt và song.txt
1: Tìm một chuỗi trong một file
VD: Tìm từ “tat nang” trên file voivang.txt
2: Tìm kiếm chuỗi trên nhiều file
VD: Tìm từ “gio” trên 2 file voivang.txt và song.txt
3: Tìm kiếm không phân biệt hoa thường, sử dụng tùy chọn -i
VD: Như các bạn đã thấy, trên 2 file text có cả thừ viết hoa và viết thường. Để tìm kiếm mà không phân biệt hoa thường ta có thể sử dụng tùy chọn -i
Ở đây, mình tìm từ “toi” là chữ thường thì sẽ không ra kết quả, nhưng nếu sử dụng tùy chọn -i
, thì kết quả sẽ xuất hiện với từ “Toi”
4: Tìm kiếm ngược, sử dụng tùy chọn -v
VD: Để tìm tất cả những dòng không chứa từ “nang”
5: Hiển thị số dòng, số lượng, giới hạn số dòng đầu ra
Ứng với các tùy chọn sau:
-n
: Hiện thị số thứ tự của dòng và dòng chứa từ cần tìm-c
: Đếm số dòng khớp với kí tự cần tìm-m[chỉ số cần giới hạn]
: Giới hạn số lượng dòng khớp
- Với tùy chọn
-n
, kết quả hiển thị bao gồm thứ tự dòng và dòng chứa từ “nhat”. - Với tùy chọn
-c
, kết quả hiển thị 2 vì có 2 dòng chứa từ “Toi”. - Tùy chọn cuối, chúng ta có thể tùy chỉnh số dòng được hiển thị theo ý muốn của mình.
6: Tìm kiếm nhiều chuỗi
Có 3 cú pháp tìm tương đương nhau:
- Cách 1:
grep -e "word1" -e "word2" <file>
- Cách 2:
grep "word1\|word2" <file>
#\
để phân biệt word1 với word2 - Cách 3:
egrep "word1|word2" <file>
7: Tìm kiếm tên tệp
-l
: để có được các tập tin phù hợp với tìm kiếm-L
: để có được các tập tin không phù hợp với tìm kiếm-h
: hiện thị không với tên file (khi chỉ định nhiều file)-H
: hiển thị cùng với tên file
7.1: So sánh giữa 2 tùy chọn -l
và -L
- Tùy chọn
-l
sẽ ra kết quả là những tên file có chứa từ “gio” - Tùy chọn
-L
sẽ ra kết quả là những tên file không chứa từ “gio”
7.2: So sánh 2 tùy chọn -h
và -H
- Tùy chọn
-h
sẽ cho kết quả những dòng chứa từ “gio” mà không kèm với tên file - Còn với tùy chọn
-H
kết quả sẽ bao gồm tên file và dòng chứa từ “gio”
8: Hiển thị thêm dòng trước, sau, xung quanh dòng chứa kết qủa cần tìm.
grep -<A, B hoặc C> <n> "chuoi" <file>
Trong đó:
A
: hiển thị dòng sau dòng khớp với kí tự cần tìmB
: hiển thị dòng trước dòng khớp với kí tự cần tìmC
: hiển thị dòng xung quanh dòng khớp với kí tự cần tìmn
: là số tự nhiên chỉ định xem hiển thị trước, sau hay xung quanh bao nhiêu dòng
VD:
9: Tìm chính xác với -w
VD: Mình có file vqmanh.txt
- Khi bạn tìm kiếm bình thường với
grep
, kết quả sẽ hiển thị tất cả những dòng có chứa từ vqmanh kể cả vqmanh99. - Với tùy chọn
-w
, kết quả sẽ tìm chính xác chỉ những dòng có chứa từ vqmanh.
10: Tìm tất cả các file trên cả thư mục con và thư mục cha với tùy chọn -R
- Thêm tùy chọn này các bạn có thể tìm trên thư mục con lẫn thư mục cha khi không biết chính xác file nào chứa chuỗi cần tìm. Các bạn có thể xem cụ thể hơn ở phần 11.2
11: Mở rộng nâng cao, kết hợp các tùy chọn
11.1 Tìm kiếm dựa trên output của lệnh trước làm input của lệnh sau sử dụng “|
“
11.2 Tìm chuỗi, hiển thị số dòng, tên file
VD: Tìm “error” hiển thị số dòng, tên file mà chưa biết chính xác file nào: grep -Hin 'error' /var/log/httpd/*
VD: Sử dụng tùy chọn -Rin
để tìm kiếm tất cả những file có trong thư mục, kể cả thư mục con.
grep -Rin 'error' /var/log/
# VD này sẽ tìm kiếm tất cả những file có chứa “error” và hiển thị tên file, số dòng, kể cả thư mục con năm trong thư mục log
.
11.3 Đọc file loại bỏ comment, dòng trống
VD: Khi một file cấu hình có sử dụng rất nhiều comment và các dòng trống. Mà bạn chỉ muốn đọc các cấu hình một cách nhanh và ngắn gọn sử dụng:
egrep -v "^#|^*#|^$" tên_file
-
^#
– Những dòng bắt đầu bằng#
-
^*#
– Những dòng bắt đầu bằng#
kể cả khoảng trống trước nó -
^$
– Những dòng trống
Hy vọng bài viết này sẽ hữu ích cho các bạn mới bắt đầu tìm hiểu về lệnh grep.
Leave a Reply