Lệnh grep toàn tập Image Lệnh grep toàn tập

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ệnhChứ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

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

Tìm kiếm không phân biệt hoa thường

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

Hiển thị số dòng phù hợp

2.4.2. Đếm số lượng dòng khớp

Đếm số lượng dòng khớp

2.4.3. Giới hạn số lượng dòng khớp

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:

Tìm kiếm nhiều chuổi cùng lúc qua file

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ìm kiếm tên tệp

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

Tên tệp tiền tố

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>
    

Tìm kiếm với tùy chọn color

Sự khác nhau giữa auto và aways:

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ụ:

Hiển thị thêm dòng trước, sau, xung quanh dòng chứa kết qủa

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