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

[NGINX] Hướng dẫn cài đặt Nginx trên CentOS 8

NGINX (đọc là “engine x”) là một phần mềm mã nguồn mở cho web serving, reverse proxying, caching,...
30/12/2020

Mattermost – Hướng dẫn cài đặt

Giới thiệu Mattermost Mattermost là giải pháp phần mềm thay thế cho các doanh nghiệp vừa và nhỏ...
30/12/2020

Install Python PIP on CentOS7

Python PIP is a package manager for Python, just like Yum is a package manager for CentOS 7 and RHEL 7. In this article,...
28/12/2020
Bài Viết

Bài Viết Mới Cập Nhật

Dịch Vụ Xây Dựng Hệ Thống Peering Với Internet Exchange (IXP)
04/04/2025

Dịch Vụ Triển Khai VPN Site-to-Site & Remote Access
04/04/2025

Dịch Vụ Thiết Lập Hệ Thống Tường Lửa (Firewall)
04/04/2025

Dịch Vụ Triển Khai Hệ Thống Ảo Hóa & Cloud
04/04/2025

Dịch Vụ Triển Khai Hệ Thống Ceph
04/04/2025