Bài 5. Text Processing trong Bash DevOps: Grep, Awk, Sed Hiệu Quả

Công Cụ Text Processing – Grep, Awk, Sed trong Bash DevOps

Khi làm DevOps, bạn sẽ thường xuyên đối mặt với đống text – log hệ thống, output lệnh, file config – và cần trích xuất, lọc, hoặc sửa chúng nhanh chóng. Đây là lúc text processing trong Bash DevOps tỏa sáng với grep Bash, awk Bash, và sed Bash. Trong bài thứ năm của series Bash Script Chuyên Sâu cho DevOps, tôi sẽ dẫn bạn qua cách dùng ba công cụ này để xử lý text như pro, kèm thực hành thực tế. Đây là những thứ tôi dùng để debug log và phân tích hệ thống mỗi ngày, không chỉ là lý thuyết đâu nhé!

Tại Sao Text Processing Quan Trọng?

Text trong DevOps

  • Log: Tìm lỗi 500 trong Nginx log.
  • Output lệnh: Trích xuất CPU usage từ top.
  • Config: Sửa dòng trong file cấu hình tự động.

Ví dụ: Thay vì đọc từng dòng log bằng tay, bạn dùng grep để lọc lỗi trong 2 giây.

Lợi Ích trong DevOps

  • Nhanh chóng: Phân tích dữ liệu không cần tool phức tạp.
  • Tự động hóa: Xử lý text trong pipeline hoặc script giám sát.
  • Debug: Tìm nguyên nhân lỗi từ log mà không mò mẫm.

Thực tế: Tôi từng dùng awk để trích IP từ log truy cập, phát hiện tấn công DDoS trong 5 phút – không có nó thì mất cả giờ.

Công Cụ Text Processing trong Bash

Grep Bash: Lọc Dữ Liệu

Grep tìm kiếm text theo pattern.

  1. Tìm chuỗi:

    echo "Error: Disk full" | grep "Error"
    • Kết quả: “Error: Disk full”.
  2. Lọc file:

    grep "500" /var/log/nginx/access.log
  3. Tùy chọn hữu ích:

    • -i: Không phân biệt hoa thường.
    • -n: Hiển thị số dòng.
    • -v: Loại bỏ dòng khớp.
      grep -n "error" log.txt

Awk Bash: Trích Xuất và Xử Lý

Awk chia text thành cột, trích xuất dữ liệu.

  1. Trích cột:

    echo "user1 10.0.0.1 login" | awk '{print $2}'
    • Kết quả: “10.0.0.1” (cột 2).
  2. Kết hợp điều kiện:

    awk '$1 > 50 {print "High: " $0}' <<< "60% disk"
    • Kết quả: “High: 60% disk”.
  3. Xử lý file:

    awk '{print $5}' /proc/meminfo

Sed Bash: Sửa Text

Sed thay thế, xóa, hoặc chỉnh sửa text.

  1. Thay thế:

    echo "Hello World" | sed 's/World/DevOps/'
    • Kết quả: “Hello DevOps”.
  2. Thay trong file:

    sed -i 's/error/warning/' log.txt
    • -i: Ghi đè file.
  3. Xóa dòng:

    sed '/error/d' log.txt

Tips: Kiểm tra output trước khi dùng -i để tránh sửa sai.

Thực Hành: Script Phân Tích Log Hệ Thống

Chuẩn Bị File Log Giả Lập

Tạo system_log.txt:

echo "2025-03-13 10:00:00 INFO Disk usage: 42%" > system_log.txt
echo "2025-03-13 10:01:00 ERROR CPU high: 95%" >> system_log.txt
echo "2025-03-13 10:02:00 INFO Memory free: 1024MB" >> system_log.txt

Script Phân Tích

Tạo analyze_system_log.sh:

#!/bin/bash

LOG_FILE="system_log.txt"

# Kiểm tra file
if [ ! -f "$LOG_FILE" ]; then
    echo "Không tìm thấy $LOG_FILE"
    exit 1
fi

# Grep: Tìm lỗi
echo "Các lỗi trong log:"
grep "ERROR" "$LOG_FILE"

# Awk: Trích xuất % usage
echo "Danh sách usage:"
awk '/usage/ {print $5}' "$LOG_FILE"

# Sed: Thay ERROR thành WARNING
echo "Chuyển ERROR thành WARNING:"
sed 's/ERROR/WARNING/' "$LOG_FILE"

# Ghi log đã xử lý
sed 's/ERROR/WARNING/' "$LOG_FILE" > "processed_log.txt"
echo "Log đã xử lý lưu vào processed_log.txt"

Chạy và Test

chmod +x analyze_system_log.sh
./analyze_system_log.sh
  • Kết quả mẫu:
    Các lỗi trong log:
    2025-03-13 10:01:00 ERROR CPU high: 95%
    Danh sách usage:
    42%
    Chuyển ERROR thành WARNING:
    2025-03-13 10:00:00 INFO Disk usage: 42%
    2025-03-13 10:01:00 WARNING CPU high: 95%
    2025-03-13 10:02:00 INFO Memory free: 1024MB
    Log đã xử lý lưu vào processed_log.txt

Giải thích:

  • grep "ERROR": Lọc dòng có lỗi.
  • awk '/usage/ {print $5}': Trích cột 5 (usage).
  • sed 's/ERROR/WARNING/': Thay text.

DevOps: Script này có thể dùng để phân tích log pipeline hoặc hệ thống.

Debug Text Processing

  • Test grep:
    grep -v "INFO" "$LOG_FILE"  # Loại dòng INFO
  • Kiểm tra awk:
    awk '{print "Debug: " $0}' "$LOG_FILE"

Thực tế: Tôi từng dùng grep sai pattern, debug bằng cách in từng bước với awk – nhanh chóng tìm ra lỗi.

Ứng Dụng trong DevOps

Phân Tích Log

  • Tìm lỗi 500 trong Nginx:
    grep " 500 " /var/log/nginx/access.log | awk '{print $1}'
    • Lấy IP gây lỗi.

Pipeline CI/CD

  • Trích kết quả test:
    analyze_test:
    script:
      - grep "FAIL" test_result.log > failed_tests.txt
      - cat failed_tests.txt

Case study: Một team dùng sed để sửa config tự động trong pipeline, giảm thời gian deploy từ 10 phút xuống 2 phút.

Kết Luận

Text processing trong Bash DevOps với grep Bash, awk Bash, và sed Bash là vũ khí để bạn lọc, trích xuất, và chỉnh sửa text nhanh chóng. Thực hành với analyze_system_log.sh cho thấy bạn có thể tự động hóa phân tích log dễ dàng – bước quan trọng trong quản lý hệ thống. Bài tiếp theo, chúng ta sẽ khám phá Function trong Bash – cách tái sử dụng code như pro.

Điều hướng chuỗi bài viết<< Bài 4. Xử Lý File trong Bash DevOps: Đọc, Ghi và Quản Lý Hiệu Quả
>> Bài 6. Function trong Bash DevOps: Tái Sử Dụng Code Hiệu Quả
Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận

Có thể bạn quan tâm