cut 是經典的文字流欄位擷取工具,配合管線可快速從結構化輸出(如 /etc/passwd、CSV、日誌)中取出所需欄位,輕量且無依賴,是 Shell 腳本與單行指令的常客。

cut OPTION... [FILE]...
-d, --delimiter=DELIM:指定分隔符(預設 Tab)。-f, --fields=LIST:選取欄位編號(1-based),支援範圍 1,3-5。-c, --characters=LIST:按字元位置擷取(多位元組字元慎用)。-b, --bytes=LIST:按位元組位置擷取。-s, --only-delimited:忽略不含分隔符的行。--output-delimiter=STRING:輸出分隔符(預設同輸入)。$ head /etc/passwd | cut -d: -f1,6
root:/root
daemon:/usr/sbin
bin:/bin
sys:/dev
sync:/bin
games:/usr/games
man:/var/cache/man
lp:/var/spool/lpd
mail:/var/mail
news:/var/spool/news

$ ps aux | cut -c1-10,20-30
# 取第 3 欄並去重計數
$ cut -d' ' -f3 access.log | sort | uniq -c | sort -rn
# CSV 處理(含引號欄位建議用 csvkit 或 awk)
$ cut -d, -f2,5 data.csv
cut --complement -f2 顯示除第 2 欄外所有欄位。awk -F'::' '{print $2}' 或 sed。cut -d: -f3 正確對應。| 工具 | 優勢 | 適用場景 |
|---|---|---|
| cut | 極簡、啟動快、無依賴 | 固定分隔符、單純欄位擷取 |
| awk | 可程式化、支援正則分隔符、數學運算 | 複雜欄位邏輯、格式化、彙總 |
| sed | 流編輯、模式空間操作 | 行級替換、刪除、插入 |
-c 可能切半個字,改用 awk '{print substr($0,1,10)}' 或確認 locale 為單字節編碼。-s 抑制。掌握 cut 的欄位選取語法,能在管線中快速「切菜」,是文字處理流水線的基石工具。