萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux cut 命令實戰:按欄位/字元/位元組精準擷取文字資料

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

/etc/passwd 範例輸出

語法與核心選項

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:輸出分隔符(預設同輸入)。

實戰範例

從 /etc/passwd 擷取使用者名與家目錄

$ 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

cut 擷取結果

擷取固定寬度欄位(如 ps 輸出)

$ 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 欄外所有欄位。
  • 多字元分隔符:cut 僅支援單字元,需用 awk -F'::' '{print $2}' 或 sed。
  • 處理空欄位:連續分隔符視為空欄位,cut -d: -f3 正確對應。

對比:cut vs awk vs sed

工具優勢適用場景
cut極簡、啟動快、無依賴固定分隔符、單純欄位擷取
awk可程式化、支援正則分隔符、數學運算複雜欄位邏輯、格式化、彙總
sed流編輯、模式空間操作行級替換、刪除、插入

常見陷阱

  • 中文字元下 -c 可能切半個字,改用 awk '{print substr($0,1,10)}' 或確認 locale 為單字節編碼。
  • 輸入無分隔符行時預設整行輸出,加 -s 抑制。

掌握 cut 的欄位選取語法,能在管線中快速「切菜」,是文字處理流水線的基石工具。

copyright © 萬盛學電腦網 all rights reserved