Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux cut 指令詳解:從文字資料中精準擷取欄位與字元

編輯:關於 Linux

cut 是 Linux 文字處理三劍客之一(另兩為 awk、sed),專注於「直向切割」:依分隔符或字元位置擷取特定欄位/範圍。語法簡潔、效能極佳,是 Shell 腳本處理結構化文字(CSV、/etc/passwd、日誌、命令輸出)的首選工具。本文詳細說明參數、範例與進階技巧。

基本語法

cut [選項] [檔案...]
選項說明
-d, --delimiter=分隔字元指定欄位分隔符(預設 Tab),單一字元
-f, --fields=欄位清單選取欄位編號(1-based),支援範圍 1,3-5
-c, --characters=字元清單依字元位置切割(1-based),支援範圍 1-10
-b, --bytes=位元組清單依位元組位置切割(處理多位元組字元時與 -c 不同)
--complement反向選取(保留未指定的欄位/字元)
-s, --only-delimited僅輸出含分隔符的行(忽略無分隔符行)
--output-delimiter=字串輸出時使用不同分隔符

核心範例

1. 擷取 /etc/passwd 使用者名稱與家目錄(第 1、6 欄)

cut -d: -f1,6 /etc/passwd

輸出:

root:/root
daemon:/usr/sbin
user1:/home/user1

2. 擷取前 3 欄與第 5 欄以後所有欄位

cut -d: -f1-3,5- /etc/passwd

3. 反向選取:排除密碼欄位(第 2 欄)

cut -d: --complement -f2 /etc/passwd

4. 固定寬度欄位:擷取 ls -l 的檔案名稱(第 55 字元起)

ls -l | cut -c55-

5. 變更輸出分隔符為 Tab

cut -d: -f1,3,6 --output-delimiter=$'\t' /etc/passwd

6. 管線串接:取出目前登入使用者

who | cut -d' ' -f1 | sort -u

7. 處理 CSV(含引號逗號)的限制

cut 無法正確處理帶引號的 CSV(如 "field1","field2,with,comma")。請改用:

  • awk -F',' '{print $1,$3}'(簡單情況)
  • csvkit 套件 csvcut -c 1,3 file.csv
  • Python csv 模組

進階技巧

欄位清單語法完整支援

  • N:第 N 欄
  • N-M:第 N 到 M 欄
  • -M:第 1 到 M 欄
  • N-:第 N 到最後
  • 組合:1,3-5,7,9-

搭配標準輸入使用

echo "a:b:c:d" | cut -d: -f2,4
# 輸出: b:d

多字元分隔符的替代方案

cut -d 僅支援單一字元。多字元分隔符請用:

awk -F'::' '{print $2}'      # 以 :: 分隔
sed 's/::/\t/g' | cut -f2    # 先轉換為 Tab

效能比較

工具適用場景速度
cut固定分隔符/位置擷取欄位最快(C 語言實作,單執行緒)
awk條件判斷、運算、格式化快
sed模式替換、行編輯快
Python/Perl複雜邏輯、CSV、JSON較慢(啟動開銷)

實戰腳本片段

#!/bin/bash
# 從 nginx access log 擷取 IP、請求方法、URL、狀態碼
# log 格式: IP - - [time] "GET /url HTTP/1.1" 200 ...
cut -d' ' -f1,6,7,9 access.log | head -20

# 監控特定使用者的 CPU 使用率 (ps 輸出固定寬度)
ps -eo user,pcpu,comm | grep ^nginx | cut -c1-16,17-22

常見錯誤與除錯

  • 欄位編號從 1 開始(非 0),-f0 會報錯。
  • 分隔符未出現在行中:預設輸出整行,加 -s 可抑制。
  • 中文字元寬度:-c 計算字元數(UTF-8 多位元組字元算 1),-b 計算位元組數(中文通常 3 bytes)。
  • 輸出分隔符預設同輸入,需變更請用 --output-delimiter。

總結

cut 以「簡單、快速、專一」著稱。掌握 -d/-f 與欄位清單語法,即可處理 80% 結構化文字擷取需求。遇到 CSV 引號、多字元分隔符、需條件判斷時,果斷切換至 awk 或專用工具,勿強求 cut 做超出設計範圍的事。

Copyright © Windows教程網 All Rights Reserved