Linux命令之cut

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
寫的很詳細,大家可以看看。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章