cut命令用於從檔案或者標準輸入中讀取內容並截取每一行的特定部分並送到標準輸出。
截取的方式有三種,一是按照字元位置,二是按照位元組位置,三是使用一個分隔字元將一行分割成多個field,並提取指定的fields。
cut命令有5個參數,其中-c,-b,-f分別表示"character", "byte"以及"field"截取方式。當採用field模式截取時,需要用"-d"參數指定一個分隔字元,分割符只能為單個字元。另外還有一個"- s",suppress,表示如果行中沒有給出的分割符則不輸出該行(預設為如果沒有分隔字元則將該行原封不動輸出)
以下為幾個例子:
- 按字元截取:echo hello, world | cut -c 8-12 則輸出"world"(截取字串中從第8到第12個共12個字元)
- 按分隔字元截取:echo hello, world | cut -f 2 -d " "則輸出"world"(截取以空格分割的第二部分)
- echo Long, long ago | cut -f 2,3 -d " "則輸出" Long, ago"(截取以空格分割的第2、3部分,注意輸出的結果也以-d指定的分隔字元分割)
- 使用"-s"安靜地忽略沒有給出地分隔字元地行:echo hello |cut -d "!" -f 1 -s則什麼也不輸出(因為行中沒有"!"字元)
如果命令執行成功則返回0,遇到錯誤則返回一個大於0的數字。
其中-c,-b,好理解,下面我自己理解的-f參數,自己多實驗幾次,多輸出幾次,就明白了。
# echo Long,long ago,ddddddd | cut -f 2 -d ,
long ago
# echo Long,long ago,ddddddd | cut -f 2- -d ,
long ago,ddddddd
# echo Long,long ago,ddddddd,hhhhhhhhhhh | cut -f 2- -d ,
long ago,ddddddd,hhhhhhhhhhh
上面三個對比一下就會很清楚。
# echo Long,long ago,ddddddd | cut -f 2,3 -d ,
long ago,ddddddd
# echo Long,long ago,ddddddd | cut -f 1,3 -d ,
Long,ddddddd
# echo Long,long ago,ddddddd | cut -f 1,2 -d ,
Long,long ago
# echo Long,long ago ddddddd | cut -f 2 -d ,
long ago ddddddd
# echo Long,long ago ddddddd | cut -f 2,3 -d ,
long ago ddddddd