6 Log Parsing Commands

問題描述

六大日誌解析指令

解決方法

GREP

GREP 搜索任何給定的輸入文件,選擇匹配一個或多個模式的行。

  1. 查找匹配的文件名
    1
    $grep -l "PATTERN" *.log
  2. 不區分大小寫的單詞匹配
    1
    $grep -i "PATTERN" test.log
  3. 顯示行號
    1
    $grep -n "PATTERN" test.log
  4. 反向匹配
    1
    $grep -v "PATTERN" test.log
  5. 從文件中取模式
    1
    2
    $grep -f pattern_file test.log
    # pattern_file 內容以換行符分隔
  6. 在目錄中遞歸搜索
    1
    $grep -R "PATTERN" /var/log

CUT

CUT 從每個文件的每一行中剪出選定的部分,並將它們寫入標準輸出。

  1. 剪下前 3 個字節
    1
    $cut -b 1,2,3 test.log
  2. 選擇以空格分隔的第 2 列
    1
    $cut -d " " -f 2 test.log
  3. 指定字符位置
    1
    $cut -c 1-8 test.log

SED

SED 讀取指定的文件,根據命令列表修改輸入。

  1. 替換字符串
    1
    $sed 's/old/new/g' test.log
  2. 替換第二次出現的字符串
    1
    $sed 's/old/new/2' test.log
  3. 替換第四行的字符串
    1
    $sed '4s/old/new/' test.log
  4. 替換指定範圍行的字符串
    1
    $sed '2-4 s/old/new/' test.log
  5. 刪除一行
    1
    $sed '4d' test.log

AWK

AWK 掃描每個輸入文件中的行,匹配任意一組模式。

  1. 打印匹配的行
    1
    $awk '/PATTERN/ {print}' test.log
  2. 將一行分成多個字段
    1
    $awk '{print $1,$3}' test.log
  3. 打印第 2 到第 7 行
    1
    $awk 'NR==2, NR==7 {print NR, $0}' test.log
  4. 打印超過 10 個字符的行
    1
    $awk 'length($0)>10' test.log
  5. 在列中查找字符串
    1
    $awk '{ if($4=="PATTERN" print $0; }' test.log

SORT

SORT 按行排序文本和二進制文件。

  1. 輸出到文件
    1
    $sort -o output.txt input.txt
  2. 逆序排序
    1
    $sort -r test.log
  3. 數值排序
    1
    $sort -n test.log
  4. 基於第 3 列排序
    1
    $sort -k -3n test.log
  5. 檢查文件是否有序
    1
    $sort -c test.log
  6. 排序並刪除重複項
    1
    $sort -u test.log

UNIQ

UNIQ 讀取指定的輸入文件,比較相鄰的行,並將每個唯一的輸入行複製到輸出文件中。

  1. 告訴某行重複的次數
    1
    $uniq -c test.log
  2. 打印唯一的行
    1
    $uniq -u test.log
  3. 跳過前兩個字段
    1
    $uniq -f 2 test.log
  4. 打印重複的行
    1
    $uniq -d test.log
  5. 忽略大小寫比較
    1
    $uniq -i test.log

TAIL

搭配 GREP 使用,用於查看文件的末尾。

1
2
3
4
$tail -f test.log
$tail -f test.log | grep "PATTERN"
$tail -f test.log | grep -C 3 "PATTERN"
$tail -f test.log | grep -C 3 -i -E "PATTERN1|PATTERN2"

參考資料

ZTAIL

ztail 是 tail 的增強版,可以顯示壓縮文件的末尾。

1
$ztail test.log.gz

ztail 也可以搭配 GREP 使用,用於查看壓縮文件的末尾。
1
$ztail test.log.gz | grep "PATTERN"

ZGREP

zgrep 是 grep 的增強版,可以搜索壓縮文件。

1
$zgrep "PATTERN" test.log.gz