Những điều tâm đắc nhất khi sử dụng lệnh GREP

30/12/2020

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 greprấ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 -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-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ì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 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.

ONET IDC thành lập vào năm 2012, là công ty chuyên nghiệp tại Việt Nam trong lĩnh vực cung cấp dịch vụ Hosting, VPS, máy chủ vật lý, dịch vụ Firewall Anti DDoS, SSL… Với 10 năm xây dựng và phát triển, ứng dụng nhiều công nghệ hiện đại, ONET IDC đã giúp hàng ngàn khách hàng tin tưởng lựa chọn, mang lại sự ổn định tuyệt đối cho website của khách hàng để thúc đẩy việc kinh doanh đạt được hiệu quả và thành công.
Bài viết liên quan

Hướng dẫn cài đặt FFMPEG trên CentOS 7/8

FFMPEG là một công cụ hỗ trợ chuyển đổi định dạng các file audio, và video trên Linux. Nó cho phép...
25/12/2020

Những điều tâm đắc nhất khi sử dụng lệnh GREP

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...
30/12/2020

Lệnh để kiểm tra thông tin phần cứng trên Linux

Thông tin phần cứng Giống như tất cả mọi thứ, có rất nhiều các lệnh để kiểm tra thông tin về...
07/01/2021