cut
?是 Linux/Unix 系統中一個用于按列提取文本內容的命令,常用于處理結構化文本(如 CSV、日志、配置文件等)。它通過分隔符、字符位置或字節位置來切割文本,提取指定部分。
核心功能
-
按字段(列)提取:用分隔符(如逗號、冒號)將文本分割成多列,提取指定列。
-
按字符位置提取:直接根據字符的位置提取內容(如第 1-5 個字符)。
-
按字節提取:類似字符位置,但按字節處理(對 ASCII 文本效果相同,但對多字節字符需謹慎)。
常用參數
參數 | 作用 | 示例 |
---|---|---|
-d | 指定字段分隔符(默認是制表符) | -d ',' ?用逗號分隔 |
-f | 選擇指定字段(列) | -f 1,3 ?提取第 1 和 3 列 |
-c | 按字符位置提取 | -c 1-5 ?提取第 1 到 5 個字符 |
-b | 按字節位置提取 | -b 2-4 ?提取第 2 到 4 個字節 |
--complement | 反向選擇(提取未指定的部分) | -f 2 --complement ?提取除第 2 列外的所有內容 |
使用示例
1.?按分隔符提取字段
假設文件?data.csv
?內容為:
Name,Age,City
Alice,25,Beijing
Bob,30,Shanghai
-
提取第 1 列(姓名):
cut -d ',' -f 1 data.csv
Name Alice Bob
-
提取第 2 和 3 列(年齡和城市):
cut -d ',' -f 2,3 data.csv
輸出:
Age,City 25,Beijing 30,Shanghai
2.?按字符位置提取
假設文件?text.txt
?內容為:
ABCDEFGHIJKLMN
-
提取第 3 到 6 個字符:
cut -c 3-6 text.txt
CDEF
3.?處理系統文件
-
提取?
/etc/passwd
?中的用戶名(第 1 列,冒號分隔):cut -d ':' -f 1 /etc/passwd
輸出:
root daemon bin ...(系統用戶列表)
注意事項
-
分隔符與字段:
-
默認分隔符是制表符,需用?
-d
?指定其他字符(如?-d ':'
)。 -
如果字段包含分隔符本身(如?
"Hello,World"
),cut
?無法直接處理,需改用?awk
?或手動處理。
-
-
多字節字符問題:
-
-c
?按字符位置切割,適用于 UTF-8 文本。 -
-b
?按字節切割,處理非 ASCII 字符(如中文)時可能截斷亂碼。
-
-
與?
awk
?的區別:-
cut
?更簡單高效,適合固定分隔符的簡單場景。 -
awk
?支持正則表達式分隔符、復雜邏輯,適合靈活處理文本。
-
經典組合用法
-
提取日志中的時間戳(假設時間在第 1-15 個字符):
cat app.log | cut -c 1-15
-
提取 IP 地址(假設 IP 是第 2 列,空格分隔):
echo "192.168.1.1 404 GET /api" | cut -d ' ' -f 1
-
反向提取(排除第 2 列):
cut -d ',' -f 2 --complement data.csv
總結
cut
?是一個輕量級文本處理工具,適合快速提取結構化數據的特定部分。對于復雜需求(如動態分隔符、條件判斷),建議使用?awk
?或?sed
。