『忘了再學』Shell基礎 — 26、cut列提取命令
- 2022 年 6 月 7 日
- 筆記
- 高級測試技能 - Shell基礎
1、cut命令說明
cut
命令的作用是對文本中的內容進行截取。
一個文件裡邊有很多數據,grep
命令是用來提取文本內容包含匹配規則的行,而cut
命令是用來截取文本內容中的列數據。
[root@localhost ~]# cut [選項] 文件名
選項:
-f 列號:提取第幾列。
-d 分隔符:按照指定分隔符分割列,默認分隔符是製表符(tab鍵)。
-c 字符範圍:不依賴分隔符來區分列,而是通過字符範圍(行首為0)來進行字段提取。
「n-」表示截取所有行從第n個字符到行尾;
「n-m」表示截取所有行從第n個字符到第m個字符;
「-m」表示截取所有行從第1個字符到第m個字符。
2、cut命令練習
使用如下文本:
ID Name Gender Mark
1 Tangs M 88
2 Sunwk M 99
3 Zhubj M 77
4 Shahs M 66
(1)cut命令基本用法
使用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
(2)cut命令選取多列
如果想要提取文本中多列數據,只要將列號直接用,
(逗號)分開即可,命令如下:
[root@localhost tmp]# cut -f 2,4 student.txt
Name Mark
Tangs 88
Sunwk 99
Zhubj 77
Shahs 66
(3)按字符來進行提取
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
注意:在實際工作中,這種方式很難提取出合理的數據信息,除非格式非常的規律,因為每行的字符個數不相等,截取出來的內容會不完整。
(4)按指定分隔符進行截取數據
例如:以:
作為分隔符,提取/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
之後我們就可以把這些提取出來的數據,傳入變量中,然後該變量就可以在程序中進行操作了。
3、cut命令分隔符說明
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
來進行截取。