Chuyển đến nội dung chính
Mô-đun 3 · Bài học 2 trong tổng số 27/11 trong khóa học~15 min
Bài học theo mô-đun (2/2)

Đường ống và bộ lọc (grep và |)

Một trong những tính năng mạnh mẽ nhất của dòng lệnh Linux là khả năng kết nối các lệnh khác nhau để đầu ra của lệnh này trở thành đầu vào cho lệnh tiếp theo. Kỹ thuật này được thực hiện bằng cách sử dụng pipelines và thường được ghép nối với lệnh lọc văn bản grep.


Lọc văn bản: grep

Lệnh grep (In biểu thức chính quy toàn cầu) tìm kiếm một chuỗi văn bản cụ thể trong một hoặc nhiều tệp và in các dòng phù hợp:

Bash
grep "string" [file_name]

Tùy chọn hữu ích cho grep

  • grep -i "error" server.log: Thực hiện tìm kiếm không phân biệt chữ hoa chữ thường (bỏ qua sự khác biệt giữa chữ hoa và chữ thường, tìm "Lỗi", "lỗi" hoặc "ERROR").
  • grep -n "connection" server.log: Hiển thị số dòng cùng với dòng phù hợp.
  • grep -v "INFO" server.log: Đảo ngược tìm kiếm, chỉ hiển thị các dòng không chứa từ khóa đã chỉ định.

Chuỗi lệnh: Đường ống |

Toán tử đường ống được biểu thị bằng thanh dọc |. Nó gửi trực tiếp đầu ra tiêu chuẩn của lệnh ở bên trái đến đầu vào tiêu chuẩn của lệnh ở bên phải:

Bash
[command1] | [command2]

Ví dụ: nếu tệp nhật ký rất lớn và bạn muốn tìm kiếm một từ cụ thể mà không in toàn bộ tệp, bạn có thể kết hợp cat và grep:

Bash
cat logs/server.log | grep ERROR

Thao tác này sẽ đọc toàn bộ tệp server.log bằng cat, nhưng thay vì in ra màn hình, nó sẽ chuyển luồng tới grep, chỉ lọc và hiển thị các dòng có chứa từ "ERROR".


Ví dụ sử dụng và các lỗi thường gặp

Nếu bạn tìm kiếm một từ viết thường (ví dụ: "post") trong một tệp chỉ chứa từ đó ở dạng chữ hoa (ví dụ: "POST"), grep sẽ không trả về bất cứ điều gì:

Bash
grep "post" logs/access.log
# Output: (no results, search is case-sensitive by default)

Để tìm dòng bất kể nó viết kiểu gì, hãy sử dụng cờ -i:

Bash
grep -i "post" logs/access.log
# Output:
# 127.0.0.1 - - [22/May/2026:10:10:00 +0000] "POST /login HTTP/1.1" 401 234

Nếu tệp được chỉ định không tồn tại, grep sẽ trả về lỗi:

Bash
grep "ERROR" nonexistent_file.log
# Output:
# grep: nonexistent_file.log: No such file or directory

Hãy tự mình thử

Bài tập 1: Tìm kiếm lỗi trong file log

tập thể dục#linux.m3.l2.e1
Nỗ lực: 0Đang tải…

Lọc tệp 'logs/server.log' để trích xuất và chỉ hiển thị các dòng có chứa từ 'ERROR' (phân biệt chữ hoa chữ thường).

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Sử dụng lệnh grep theo sau là từ cần tìm và đường dẫn tệp.

Giải pháp khả dụng sau 3 lần thử

Bài tập 2: Đường ống và bộ lọc

tập thể dục#linux.m3.l2.e2
Nỗ lực: 0Đang tải…

Sử dụng lệnh cat để đọc tệp 'logs/server.log' và chuyển (|) đầu ra của nó sang lệnh grep để lọc và chỉ in các dòng có chứa từ 'CẢNH BÁO'.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Kết nối cat logs/server.log với grep CẢNH BÁO bằng cách sử dụng ống '|' tính cách.

Giải pháp khả dụng sau 3 lần thử

Bài tập 3: Tìm kiếm không phân biệt chữ hoa chữ thường

tập thể dục#linux.m3.l2.e3
Nỗ lực: 0Đang tải…

Tìm kiếm tất cả các dòng có chứa từ 'post' (chữ hoa hoặc chữ thường) trong tệp 'logs/access.log' bằng cờ grep thích hợp.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Sử dụng grep với tùy chọn -i để bỏ qua phân biệt chữ hoa chữ thường.

Giải pháp khả dụng sau 3 lần thử