問題描述
六大日誌解析指令
解決方法
GREP
GREP 搜索任何給定的輸入文件,選擇匹配一個或多個模式的行。
- 查找匹配的文件名
1
$grep -l "PATTERN" *.log
- 不區分大小寫的單詞匹配
1
$grep -i "PATTERN" test.log
- 顯示行號
1
$grep -n "PATTERN" test.log
- 反向匹配
1
$grep -v "PATTERN" test.log
- 從文件中取模式
1
2$grep -f pattern_file test.log
# pattern_file 內容以換行符分隔 - 在目錄中遞歸搜索
1
$grep -R "PATTERN" /var/log
CUT
CUT 從每個文件的每一行中剪出選定的部分,並將它們寫入標準輸出。
- 剪下前 3 個字節
1
$cut -b 1,2,3 test.log
- 選擇以空格分隔的第 2 列
1
$cut -d " " -f 2 test.log
- 指定字符位置
1
$cut -c 1-8 test.log
SED
SED 讀取指定的文件,根據命令列表修改輸入。
- 替換字符串
1
$sed 's/old/new/g' test.log
- 替換第二次出現的字符串
1
$sed 's/old/new/2' test.log
- 替換第四行的字符串
1
$sed '4s/old/new/' test.log
- 替換指定範圍行的字符串
1
$sed '2-4 s/old/new/' test.log
- 刪除一行
1
$sed '4d' test.log
AWK
AWK 掃描每個輸入文件中的行,匹配任意一組模式。
- 打印匹配的行
1
$awk '/PATTERN/ {print}' test.log
- 將一行分成多個字段
1
$awk '{print $1,$3}' test.log
- 打印第 2 到第 7 行
1
$awk 'NR==2, NR==7 {print NR, $0}' test.log
- 打印超過 10 個字符的行
1
$awk 'length($0)>10' test.log
- 在列中查找字符串
1
$awk '{ if($4=="PATTERN" print $0; }' test.log
SORT
SORT 按行排序文本和二進制文件。
- 輸出到文件
1
$sort -o output.txt input.txt
- 逆序排序
1
$sort -r test.log
- 數值排序
1
$sort -n test.log
- 基於第 3 列排序
1
$sort -k -3n test.log
- 檢查文件是否有序
1
$sort -c test.log
- 排序並刪除重複項
1
$sort -u test.log
UNIQ
UNIQ 讀取指定的輸入文件,比較相鄰的行,並將每個唯一的輸入行複製到輸出文件中。
- 告訴某行重複的次數
1
$uniq -c test.log
- 打印唯一的行
1
$uniq -u test.log
- 跳過前兩個字段
1
$uniq -f 2 test.log
- 打印重複的行
1
$uniq -d test.log
- 忽略大小寫比較
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