Hướng dẫn chi tiết cách sử dụng lệnh grep để tìm kiếm văn bản trong Linux

Lệnh grep (Global Regular Expression Print) là một trong những công cụ mạnh mẽ và phổ biến nhất trên hệ điều hành Linux/Unix, cho phép người dùng tìm kiếm các chuỗi ký tự hoặc các dòng văn bản khớp với biểu thức chính quy trong các tệp tin.

1. Tìm kiếm chuỗi cơ bản trong một tệp

Cú pháp đơn giản nhất để kiểm tra xem một thông tin có tồn tại trong tệp hay không:

grep "pattern" filename

Ví dụ: Tìm các dòng chứa từ "Critical" trong tệp system_auth.log.

$ grep "Critical" system_auth.log
[2023-10-12 10:30:05] Critical: Unauthorized access attempt detected.

2. Tìm kiếm trên nhiều tệp tin cùng lúc

Bạn có thể liệt kê danh sách các tệp hoặc sử dụng ký tự đại diện như dấu sao (*).

$ grep "TIMEOUT" server_v1.log server_v2.log
server_v1.log: Connection TIMEOUT at line 45
server_v2.log: Connection TIMEOUT at line 12

3. Chỉ hiển thị tên tệp có chứa chuỗi tìm kiếm (-l)

Nếu bạn không quan tâm đến nội dung cụ thể mà chỉ muốn biết tệp nào chứa từ khóa, hãy sử dụng tham số -l.

$ grep -l "FAIL" *.txt
db_config.txt
install_log.txt

4. Hiển thị số dòng của kết quả (-n)

Tham số -n giúp bạn xác định chính xác vị trí của dòng văn bản trong tệp tin.

$ grep -n "NullPointerException" app_runtime.log
124: java.lang.NullPointerException: at com.service.DataProcessor.execute(DataProcessor.java:55)
210: java.lang.NullPointerException: at com.api.Handler.process(Handler.java:12)

5. Tìm kiếm ngược - Hiển thị các dòng không khớp (-v)

Khi muốn lọc bỏ những thông tin không cần thiết (ví dụ: lọc bỏ các dòng log thông thường để xem lỗi), bạn sử dụng -v.

$ grep -v "INFO" application.log
[WARN] Disk space is low.
[ERROR] Database connection failed.

6. Tìm kiếm đệ quy trong thư mục (-r)

Để tìm kiếm một chuỗi trong tất cả các tệp thuộc thư mục hiện tại và các thư mục con, hãy sử dụng tùy chọn -r.

$ grep -r "TODO" ./src/
./src/main.c: // TODO: Optimize this loop
./src/utils/helper.h: // TODO: Add more validation

7. Tìm kiếm không phân biệt chữ hoa và chữ thường (-i)

Mặc định grep phân biệt hoa thường. Để tìm kiếm linh hoạt hơn, hãy dùng -i.

$ grep -i "warning" production.log
[WARNING]: Memory limit reached.
[warning]: Slow query detected.

8. Tìm kiếm nhiều mẫu cùng lúc (-e hoặc -E)

Bạn có thể sử dụng nhiều tham số -e để tìm kiếm nhiều điều kiện "HOẶC" (OR), hoặc sử dụng -E cho biểu thức chính quy mở rộng.

# Sử dụng nhiều tham số -e
$ grep -e "FATAL" -e "PANIC" kernel.log

# Sử dụng biểu thức chính quy mở rộng
$ grep -Ei "(error|exception)" logs/*.log

9. Đếm số lượng kết quả khớp (-c)

Thay vì hiển thị nội dung, grep sẽ trả về số lượng dòng khớp với mẫu tìm kiếm.

$ grep -c "404" access.log
152

10. Kết hợp grep với các lệnh khác qua Pipe (|)

Grep thường được dùng để lọc kết quả đầu ra của các lệnh khác như cat, ps, hoặc netstat.

# Tìm các tiến trình liên quan đến nginx
$ ps aux | grep nginx

# Lọc nội dung tệp tin
$ cat config.yaml | grep "port"
  port: 8080

Một số tham số hữu ích khác

  • ^$: Tìm kiếm các dòng trống.
  • -A [n]: Hiển thị dòng khớp và n dòng phía sau nó (After).
  • -B [n]: Hiển thị dòng khớp và n dòng phía trước nó (Before).
  • -C [n]: Hiển thị dòng khớp và n dòng xung quanh nó (Context).

Thẻ: linux grep terminal Bash DevOps

Đăng vào ngày 28 tháng 8 lúc 20:14