cut命令的作用是对文本中的内容进行截取。
一个文件里边有很多数据,grep命令是用来提取文本内容包含匹配规则的行,而cut命令是用来截取文本内容中的列数据。
[root@localhost ~]# cut [选项] 文件名选项: -f 列号:提取第几列。 -d 分隔符:按照指定分隔符分割列,默认分隔符是制表符(tab键)。 -c 字符范围:不依赖分隔符来区分列,而是通过字符范围(行首为0)来进行字段提取。 “n-”表示截取所有行从第n个字符到行尾; “n-m”表示截取所有行从第n个字符到第m个字符; “-m”表示截取所有行从第1个字符到第m个字符。使用如下文本:
ID Name Gender Mark1 Tangs M 882 Sunwk M 993 Zhubj M 774 Shahs M 66使用cut命令提取student.txt文本中的第二列信息。
# 提取文本中第二列内容[root@localhost tmp]# cut -f 2 student.txtNameTangsSunwkZhubjShahs如果只需要第二列信息,且不需要标题,就需要结合前边说的grep命令一起使用了。
[root@localhost tmp]# grep -v "Name" student.txt | cut -f 2TangsSunwkZhubjShahs如果想要提取文本中多列数据,只要将列号直接用,(逗号)分开即可,命令如下:
[root@localhost tmp]# cut -f 2,4 student.txtName MarkTangs 88Sunwk 99Zhubj 77Shahs 66cut命令可以按照字符进行提取,需要注意8-代表的是提取所有行的第十个字符开始到行尾,而10-20代表提取所有行的第10个字符到第20个字符,而-8代表提取所有行从行首到第8个字符。
[root@localhost tmp]# cut -c -6 student.txtID Nam1 Tang2 Sunw3 Zh4 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,3user1:500user2:501之后我们就可以把这些提取出来的数据,传入变量中,然后该变量就可以在程序中进行操作了。
cut命令默认分隔符是制表符(tab键),而不是使用空格来进行分隔,因为cut命令不识别空格作为分隔符。
如果有特定的符号,也是可以用-d选项进行指定做为分隔符。
而空格不推荐作为cut命令的分隔符。
如查看磁盘情况的df命令:
[root@192 localhost]# df -hFilesystem 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 2Filesystem 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来进行截取。