cut — 從每行中擷取指定欄位或字元

從文字行中擷取指定的欄位或字元位置範圍。

語法

cut [選項] [檔案...]

常用選項

選項 說明 範例
-d 分隔符 指定欄位分隔符(預設 Tab) cut -d: -f1 /etc/passwd
-f 欄位 擷取指定欄位(1=第一欄,也支援 1-3、1,3) cut -d, -f2,4 file.csv
-c 位置 擷取指定字元位置(1=第一個字元) cut -c1-10 file.txt
-b 位元組 擷取指定位元組位置 cut -b1-4 file.txt
--complement 取指定欄位的補集(保留其他欄位) cut -d: -f6 --complement /etc/passwd

使用範例

範例 1:擷取 /etc/passwd 的使用者名稱

以冒號為分隔符,取第 1 欄(使用者名稱)。

$ cut -d: -f1 /etc/passwd
root
daemon
bin
user
alice
範例 2:從 CSV 擷取特定欄位

以逗號為分隔符,取第 2 和第 4 欄。

$ cut -d, -f2,4 data.csv
Name,Score
Alice,95
Bob,87
範例 3:擷取固定字元範圍

取每行的第 1 到 8 個字元,常用於處理固定寬度格式的資料。

$ cut -c1-8 /var/log/syslog
May 20 1
May 20 0
範例 4:取得家目錄清單(擷取多欄)

取 /etc/passwd 的第 1 欄(帳號)和第 6 欄(家目錄)。

$ cut -d: -f1,6 /etc/passwd
root:/root
user:/home/user
alice:/home/alice

常見錯誤與排錯

cut 無法正確處理欄位,輸出整行
原因
行中沒有指定的分隔符,cut 把整行視為一個欄位。
解法
確認分隔符是否正確(-d 選項);若要處理多空格分隔,改用 awk -F' '。

延伸閱讀