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:
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:
[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:
cat logs/server.log | grep ERRORThao 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ì:
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:
grep -i "post" logs/access.log
# Output:
# 127.0.0.1 - - [22/May/2026:10:10:00 +0000] "POST /login HTTP/1.1" 401 234Nếu tệp được chỉ định không tồn tại, grep sẽ trả về lỗi:
grep "ERROR" nonexistent_file.log
# Output:
# grep: nonexistent_file.log: No such file or directoryHãy tự mình thử
Bài tập 1: Tìm kiếm lỗi trong file log
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).
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
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'.
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ì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.
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ử