定義
cut是一個選取命令,選取文件中的指定字符,主要有如下用途
(1)文件內容查看
(2)顯示行中的指定部分,刪除文件中指定字段
(3)顯示文件的指定內容。
語法格式
cut [-bn] [file] 或 cut [-c] [file] 或 cut [-df] [file]
使用說明
cut 命令從文件的每一行剪切字節、字符和字段並將這些字節、字符和字段寫至標准輸出。
如果不指定 File 參數,cut 命令將讀取標准輸入。必須指定 -b、-c 或 -f 標志之一。
第一,字節(bytes),用選項-b
第二,字符(characters),用選項-c
第三,域(fields),用選項-f
主要參數
-b :以字節為單位進行分割。這些字節位置將忽略多字節字符邊界,除非也指定了 -n 標志。
-c :以字符為單位進行分割。
-d :自定義分隔符,默認為制表符。
-f :與-d一起使用,指定顯示哪個區域。
-n :取消分割多字節字符。僅和 -b 標志一起使用。如果字符的最后一個字節落在由 -b 標志的 List 參數指示的<br />范圍之內,該字符將被寫出;否則,該字符將被排除。
使用指南
按字節,字符,域 切割舉例
(1) 以“字節”定位
簡單取字節
[centos@s203 ~]$ ll total 524 drwxrwxr-x. 12 centos centos 150 Jan 26 17:17 anaconda3 drwxrwxr-x. 4 centos centos 37 Oct 11 2018 ha drwxrwxr-x. 4 centos centos 37 Jul 22 2018 hadoop drwxrwxr-x. 3 centos centos 18 Nov 2 2018 kafka drwxrwxr-x. 2 centos centos 19 Aug 23 2018 log drwxrwxr-x. 2 centos centos 21 Aug 24 2018 logs drwxrwxr-x. 3 centos centos 56 Apr 5 01:03 zookeeper -rw-rw-r--. 1 centos centos 534884 Apr 5 01:03 zookeeper.out
按字節切割:
[centos@s203 ~]$ ll |cut -b 3 t w w w w w w w w
“字節”定位中,取多字節字節(- 和,)
-b支持形如3-5的寫法,而且多個定位之間用逗號隔開
[centos@s203 ~]$ cat test.sh No Name Mark Percent tom 69 91 jack 71 87 alex 68 98 [centos@s203 ~]$ cut -b 2-4,8 test.sh o N om 9 ack lex
但有一點要注意,cut命令如果使用了-b選項,那么執行此命令時,cut會先把-b后面所有的定位進行從索引小到大排序,然后再提取。所以顛倒順序提取數據的方式不可行。
[centos@s203 ~]$ cut -b 8,2-4 test.sh o N om 9 ack lex
擴展 -num num-
[centos@s203 ~]$ cut -b -4 test.sh No N tom jack alex [centos@s203 ~]$ cut -b 4- test.sh Name Mark Percent 69 91 k 71 87 x 68 98
不會重疊
[centos@s203 ~]$ cat test.sh No Name Mark Percent tom 69 91 jack 71 87 alex 68 98 [centos@s203 ~]$ cut -b 4-,-4 test.sh No Name Mark Percent tom 69 91 jack 71 87 alex 68 98 [centos@s203 ~]$ cut -b 4-8,3-7 test.sh Name m 69 9 ck 71 ex 68
(2)以字符為定位
對單字節字符沒有什么不同,對多字節字符的影響比較大。
[centos@s203 ~]$ cat test.sh
[centos@s203 ~]$ cut -b 4-,-4 test.sh
No Name Mark Percent
王 69 91
找 71 87
李 68 98
[centos@s203 ~]$ cut -b 1 test1.sh N ▒ ▒ ▒ [centos@s203 ~]$ cut -c 1 test1.sh N 王 找 李
可以使用-n選項,-n用於告訴cut -b 不要將多字節字符拆開
[centos@s203 ~]$ cut -nb 1 test1.sh N 王 找 李
(3)以域為定位
-b和-c只能在固定格式的文檔中提取信息,而對於非固定格式的信息則束手無策
3.1cut的-d選項的默認間隔符就是制表符,所以當你就是要使用制表符的時候,完全就可以省略-d選項,而直接用-f來取域
[centos@s203 ~]$ cat -n test2.sh 1 王 69 91 2 找 71 87 3 李 68 98 [centos@s203 ~]$ cat -T test2.sh 王^I69^I91 找^I71^I87 李^I68^I98 [centos@s203 ~]$ cut -f 2 test2.sh 69 71 68
3.2 -d后面設置一個空格和字符,可不許設置多個空格或字符,因為cut只允許間隔符是一個字符
[centos@s203 ~]$ cat test.sh No Name Mark Percent tom 69 91 jack 71 87 alex 68 98 [centos@s203 ~]$ cut -d ' ' -f 2 test.sh Name 69 71 68 [centos@s203 ~]$ cut -d 'xx' -f 2 test.sh cut: the delimiter must be a single character
cut有哪些缺陷就是在處理多空格時。
3.3觀察指定分隔符和多字段取數
[centos@s203 ~]$ cat test3.sh root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[centos@s203 ~]$ cut -d ':' -f 3-5,7 test3.sh 0:0:root:/bin/bash 1:1:bin:/sbin/nologin 2:2:daemon:/sbin/nologin 3:4:adm:/sbin/nologin 4:7:lp:/sbin/nologin