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' '。