文本處理是 Linux 日常運維與開發的核心技能。本文以 /etc/passwd 等實際文件為例,系統講解 sort、uniq、cut、wc 的常用參數與組合技巧。
sort [-fbMnrtuk] [file]
-f 忽略大小寫;-b 忽略前導空白;-M 按月份排序;-n 數值排序;-r 反向;-u 去重;-t 指定分隔符;-k 指定欄位範圍。# 按第 3 欄(UID)數值排序
cat /etc/passwd | sort -t ':' -k 3n
# 按第 6 欄第 2-4 字元排序,再按第 1 欄反向
cat /etc/passwd | sort -t':' -k 6.2,6.4 -k 1r
前提:輸入必須已排序,否則只能去除相鄰重複行。
uniq [-icu]
-i 忽略大小寫
-c 計數顯示
-u 僅顯示唯一行
sort testfile | uniq -c # 顯示每行出現次數
sort testfile | uniq -dc # 僅顯示重複行及次數
sort testfile | uniq -u # 僅顯示不重複行
cut -d'分隔字元' -f fields # 有分隔符
cut -c 字元範圍 # 固定寬度
echo $PATH | cut -d ':' -f 5 # 第 5 欄
echo $PATH | cut -d ':' -f 3,5 # 第 3、5 欄
echo $PATH | cut -d ':' -f 3- # 第 3 欄到結尾
echo $PATH | cut -d ':' -f 1-3,5 # 第 1-3 及第 5 欄
wc [-lwm]
-l 行數
-w 單詞數(以空白分隔)
-m 字元數(位元組)
wc /etc/passwd # 40 行 45 單詞 1719 位元組
wc -l /etc/passwd # 統計帳號數
# 統計 /etc/passwd 中唯一 Shell 種類數
cut -d: -f7 /etc/passwd | sort | uniq | wc -l
# 找出佔用行數最多的前 5 個 IP(假設日誌第 1 欄為 IP)
cut -d' ' -f1 access.log | sort | uniq -c | sort -nr | head -5
熟練這四大工具,文本分析效率提升數倍。