cut
命令的作用是對文字中的內容進行擷取。
一個檔案裡邊有很多資料,grep
命令是用來提取文字內容包含匹配規則的行,而cut
命令是用來擷取文字內容中的列資料。
[root@localhost ~]# cut [選項] 檔名
選項:
-f 列號:提取第幾列。
-d 分隔符:按照指定分隔符分割列,預設分隔符是製表符(tab鍵)。
-c 字元範圍:不依賴分隔符來區分列,而是通過字元範圍(行首為0)來進行欄位提取。
「n-」表示擷取所有行從第n個字元到行尾;
「n-m」表示擷取所有行從第n個字元到第m個字元;
「-m」表示擷取所有行從第1個字元到第m個字元。
使用如下文字:
ID Name Gender Mark
1 Tangs M 88
2 Sunwk M 99
3 Zhubj M 77
4 Shahs M 66
使用cut
命令提取student.txt
文字中的第二列資訊。
# 提取文字中第二列內容
[root@localhost tmp]# cut -f 2 student.txt
Name
Tangs
Sunwk
Zhubj
Shahs
如果只需要第二列資訊,且不需要標題,就需要結合前邊說的grep
命令一起使用了。
[root@localhost tmp]# grep -v "Name" student.txt | cut -f 2
Tangs
Sunwk
Zhubj
Shahs
如果想要提取文字中多列資料,只要將列號直接用,
(逗號)分開即可,命令如下:
[root@localhost tmp]# cut -f 2,4 student.txt
Name Mark
Tangs 88
Sunwk 99
Zhubj 77
Shahs 66
cut
命令可以按照字元進行提取,需要注意8-
代表的是提取所有行的第十個字元開始到行尾,而
10-20
代表提取所有行的第10個字元到第20個字元,而-8
代表提取所有行從行首到第8個字元。
[root@localhost tmp]# cut -c -6 student.txt
ID Nam
1 Tang
2 Sunw
3 Zh
4 Shah
注意:在實際工作中,這種方式很難提取出合理的資料資訊,除非格式非常的規律,因為每行的字元個數不相等,擷取出來的內容會不完整。
例如:以:
作為分隔符,提取/etc/passwd
檔案中,普通使用者的第一列和第三列資料資訊。
需要先過濾掉偽使用者和root
使用者,在切割提取。
# 過濾偽使用者
# grep "/bin/bash" /etc/passwd
# 過濾root使用者
# grep -v "root" /etc/passwd
# 執行命令
[root@localhost tmp]# grep "/bin/bash" /etc/passwd | grep -v "root" | cut -d ":" -f 1,3
user1:500
user2:501
之後我們就可以把這些提取出來的資料,傳入變數中,然後該變數就可以在程式中進行操作了。
cut
命令預設分隔符是製表符(tab
鍵),而不是使用空格來進行分隔,因為cut
命令不識別空格作為分隔符。
如果有特定的符號,也是可以用-d
選項進行指定做為分隔符。
而空格不推薦作為cut
命令的分隔符。
如檢視磁碟情況的df
命令:
[root@192 localhost]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 2.1G 16G 12% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 240M 34M 194M 15% /boot
這個命令中間的分隔就是空格。
如我們通過cut
命令獲取二列資訊,如下:
[root@192 localhost]# df -h | cut -f 2
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 2.1G 16G 12% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 240M 34M 194M 15% /boot
我們看到cut
命令預設是不識別空格作為分隔符的。
如果我們用-d
選項指定空格作為分隔符,如下:
可以看到獲取的是一列空格,也非常的不好用。
所以不推薦空格作為cut
命令的分隔符。
總結一下:
cut
命令的預設分隔符是製表符,也就是tab
鍵,對空格作為分隔符是支援的,但是不怎麼好用,不推薦使用。- 如果需要用空格來擷取文字資料,可以用後邊講的
awk
來進行擷取。