Bài viết này giới thiệu các bạn về kiến thức lệnh grep toàn tập trên hệ điều hành Linux.
1. Lệnh grep
Lệnh grep
dùng để hiển thị line chứa chuỗi kí tự trong file. Có thể chỉ định nhiều file hoặc nhiều đường dẫn của đối tượng cần tìm kiếm. Có thể thay đổi file hoặc nhiều đường dẫn bằng kết quả output từ các lệnh khác. Cú pháp của lệnh grep
:
grep [tuỳ chọn] <file>
Ngoài ra lệnh grep
còn có các tùy chọn. Để xem các tuỳ chọn của lệnh grep
: man grep
Một số chức năng cơ bản của lệnh grep:
Lệnh | Chức năng |
---|---|
grep [pattern] <filename> | Tìm kiếm một pattern trong một tệp và in tất cả các dòng khớp |
grep -v [pattern] <filename> | In tất cả các dòng không khớp với pattern |
grep [0-9] <filename> | In các dòng có chứa các số từ 0 đến 9 |
grep -C 3 [pattern] <filename> | In các dòng (số dòng được chỉ định ở trên và bên dưới mẫu) để khớp với pattern. Ở đây, số lượng dòng được chỉ định là 3 |
2. Một vài ví dụ về lệnh grep
2.1. Tìm một chuỗi trong một file
Chúng ta muốn tìm một chuỗi trong một file thì dùng cú pháp sau:
grep "chuoi" ten_file
Ví dụ: Tìm một chuỗi trong một file
2.2. Tìm kiếm không phân biệt hoa thường
Nếu chúng ta tìm kiếm không phân biệt hoa thường cần sử dụng tùy chọn -i
, khi khai báo thêm nó sẽ tìm kiếm gần đúng theo kiểu không phân biệt ký tự hoa thường :
grep -i "chuoi" ten_file
2.3. Tìm kiếm ngược
Chúng ta muốn tìm kiếm ngược lại những dòng không chứa từ khóa đó thì hãy dùng tùy chọn -v
.
grep -v "chuoi" file_*
Ví dụ: Tìm kiếm các dòng khong chứ kí tự 'are' trong file.txt.
[root@test1 ~]# cat file.txt
Roses are red,
Violets are blue,
Sugar is sweet,
And so are you.
[root@test1 ~]# grep -v 'are' file.txt
Sugar is sweet,
2.4. Hiển thị số dòng, số lượng, giới hạn số dòng đầu ra
Chúng ta muốn hiển thị số dòng, số lượng, giới hạn số dòng đầu ra. Sử dụng cú pháp sau:
grep [tùy chọn] <file>
Tùy chọn ứng với các tùy chọn sau:
- -n: Hiện thị số dòng của dòng 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
2.4.1. Hiển thị số dòng phù hợp
2.4.2. Đếm số lượng dòng khớp
2.4.3. Giới hạn số lượng dòng khớp
2.5. Tìm kiếm nhiều chuỗi
Để tìm kiếm nhiều chuỗi cùng một lúc trong 1 file chúng ta sử dụng tùy chọn -e.
grep -e "chuoi" -e "chuoi" <file>
Ví dụ:
[root@test1 ~]# cat file.txt
Roses are red,
Violets are blue,
Sugar is sweet,
And so are you.
[root@test1 ~]# grep -e 'blue' -e 'you' file.txt
Violets are blue,
And so are you.
Nếu cần tìm kiếm nhiều chuổi cùng lúc chúng ta sử dụng tệp nhập như sau:
2.6. Tìm kiếm tên tệp
Các tùy chọn:
- -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
Tên tệp tiền tố để tìm kiếm kết quả:
- -h: mặc định cho đầu vào tệp duy nhất, không có tiền tố tên tệp trong đầu ra
- -H: mặc định cho nhiều tệp đầu vào, tiền tố tên tệp trong đầu ra
2.7. Tìm chính xác với grep -w
Kết quả trả về sẽ thừa so với yêu cầu bởi vì lệnh grep
sẽ tìm theo cả chuỗi con.
Ví dụ: Tìm "no" thì "not", "nothing" cũng có chứa chuỗi no nên cũng sẽ trả về kết qủa. Do đó, nếu bạn muốn tìm chính xác từ mong muốn thì có thể dùng tùy chọn -w
.
grep -w "no" file
2.8. Đầu ra màu
Đánh dấu các chuỗi tìm kiếm, số dòng, tên tệp,... bằng các màu khác nhau.Phụ thuộc vào hỗ trợ màu sắc trong thiết bị đang được sử dụng.
Tùy chọn --color
:
- auto: khi đầu ra được chuyển hướng (lệnh khác, tệp, v.v.) thông tin màu sẽ không được thông qua
- always: khi đầu ra được chuyển hướng (lệnh khác, tệp, v.v.) thông tin màu cũng sẽ được chuyển
never: xác định rõ ràng không có đánh dấu
cgrep --color=auto 'blue' <file>
Sự khác nhau giữa auto và aways:
2.8. Hiển thị thêm dòng trước, sau, xung quanh dòng chứa kết qủa
Trong trường hợp thao tác với file rất lớn, chúng ta có thể lựa chọn tìm kiếm hiển thị ra các dòng trước, sau hoặc xung quanh dòng kết quả.
grep -<A, B hoặc C> <n> "chuoi" demo_file
Trong đó:
- A : hiển thị dòng sau dòng khớp với kí tự cần tìm
- B : hiển thị dòng trước dòng khớp với kí tự cần tìm
- C : hiển thị dòng xung quanh dòng khớp với kí tự cần tìm
- n : là số tự nhiên chỉ định xem hiển thị trước, sau hay xung quang bao nhiêu dòng
Ví dụ:
grep -B 3 -iw "chuoi" demo_file
Tức là hiển thị trước kết qủa thêm nội dung của 3 dòng nữa. Không phân biệt hoa thường và tìm chính xác