cut是一個選取命令,就是將一行讀入,提取我們想要的部分。cut是以行爲單位處理的。
命令格式:
cut [選項參數] file
如果不指定file,cut將從標準輸入中讀取內容
主要參數:
-b:以字節爲單位進行分割,這些字節位置將忽略多字節符邊界,除非指定了-n標識
-c: 以字符爲單位進行分割
-d: 指定分隔符,默認爲製表符
-f: 與d一起使用,指定顯示那個域
-n:與 b一起使用,取消分割多字節
注意字節和字符的不同。有些字符是單字節的,比如大小寫字母,有些是多字節的,比如漢字。 使用-c可以處理多字節的字符,漢字也可以正常的分割,-d以字節爲單位分割,處理漢字會出現亂碼,如果與-n一起使用,則可以處理多字節字符。
[root@localhost ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/sh
提取第4個字符:
[root@localhost ~]# cat /etc/passwd | cut -b 4
t
提取前4個字符:
[root@localhost ~]# cat /etc/passwd | cut -b -4
root
提取從1-2,4-8, 9到最後的字符
[root@localhost ~]# cat /etc/passwd | cut -b 1-2,4-8,9-
rot:x:0:0:root:/root:/bin/sh
可以用-表示範圍,-4,表示從開頭到第4個,9-表示從第9個到最後。
注意:cut命令如果使用了-b選項,那麼執行此命令時,cut會先把-b後面所有的定位進行從小到大排序,然後再提取。使用該命令,無法實現改變順序的功能。
比如,想讓x放在root的前面,
[root@localhost ~]# cat /etc/passwd | cut -b 6,-4
rootx
結果顯示:root還是在x前面,所以無法實現改變順序的功能。
如果我執行who|cut -b -3,3-,你覺得會如何呢?答案是輸出整行,不會出現連續兩個重疊的第3個字符。
按:分割,提取-2,3,4-的域
[root@localhost ~]# cat /etc/passwd | cut -d : -f -2,3,5-
root:x:0:root:/root:/bin/sh
介紹一個-c和-d的區別
[rocrocket@rocrocket programming]$ cat cut_ch.txt
星期一
星期二
星期三
星期四
[rocrocket@rocrocket programming]$ cut -b 3 cut_ch.txt
�
�
�
�
[rocrocket@rocrocket programming]$ cut -c 3 cut_ch.txt
一
二
三
四
看到了吧,用-c則會以字符爲單位,輸出正常;而-b只會傻傻的以字節(8位二進制位)來計算,輸出就是亂碼。
既然提到了這個知識點,就再補充一句,如果你學有餘力,就提高一下。
當遇到多字節字符時,可以使用-n選項,-n用於告訴cut不要將多字節字符拆開。例子如下:
[rocrocket@rocrocket programming]$ cat cut_ch.txt |cut -b 2
�
�
�
�
[rocrocket@rocrocket programming]$ cat cut_ch.txt |cut -nb 2
星
星
星
星
參考博客:http://www.cnblogs.com/dong008259/archive/2011/12/09/2282679.html
寫的很詳細,大家可以看看。