关于cut

发布于 2019-11-13  611 次阅读


来自:https://www.cnblogs.com/xqzt/p/5858309.html

1. 命令简介

cut根据指定的定界符,切分文件,并将选中的列输出到标准输出。

2. 用法

cut [选项]... [文件]...

打印输入行的选中的parts 到标准输出

cut命令的分界符:-d   ---如果分界符是空格,需要 -d ' '

cut命令主要是接受三个定位方法:

第一,字节(bytes),用选项-b          (单个字母)
第二,字符(characters),用选项-c     (单个汉字)
第三,域(fields),用选项-f           (单个单词)

 

3. 选项

4. 示例

以密码/etc/passwd为例

[root@xqzt ~]# tail -n 5 /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
gnome-initial-setup:x:992:990::/run/gnome-initial-setup/:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
vboxadd:x:991:1::/var/run/vboxadd:/bin/false
wangshengzhuang:x:1000:1000:wangshengzhuang:/home/wangshengzhuang:/bin/bash

示例1:-f 指定字段

打印用户名

[root@xqzt ~]# tail -n 5 /etc/passwd |cut -d ":" -f 1
nfsnobody
gnome-initial-setup
tcpdump
vboxadd
wangshengzhuang

示例2:-f 指定多个字段

打印用户名、home目录、shell

[root@xqzt ~]# tail -n 5 /etc/passwd |cut -d ":" -f 1,6,7
nfsnobody:/var/lib/nfs:/sbin/nologin
gnome-initial-setup:/run/gnome-initial-setup/:/sbin/nologin
tcpdump:/:/sbin/nologin
vboxadd:/var/run/vboxadd:/bin/false
wangshengzhuang:/home/wangshengzhuang:/bin/bash

示例3: -f n-m打印第n-m个字段

打印用户ID和组ID

[root@xqzt ~]# tail -n 5 /etc/passwd |cut -d ":" -f 3-4
65534:65534
992:990
72:72
991:1
1000:1000
[root@xqzt ~]# tail -n 5 /etc/passwd |cut -d ":" -f 3,4
65534:65534
992:990
72:72
991:1
1000:1000

示例4: --output-delimiter指定输出使用新的分界符

[root@xqzt ~]# tail -n 5 /etc/passwd |cut -d ":" -f 3,4 --output-delimiter=" | "
65534 | 65534
992 | 990
72 | 72
991 | 1
1000 | 1000

示例5:--complement 补全选中的部分(反选)

打印除了密码、用户id 和组id 之外的所有列

[root@xqzt ~]# tail -n 5 /etc/passwd |cut -d ":" -f 2-4 --complement
nfsnobody:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
gnome-initial-setup::/run/gnome-initial-setup/:/sbin/nologin
tcpdump::/:/sbin/nologin
vboxadd::/var/run/vboxadd:/bin/false
wangshengzhuang:wangshengzhuang:/home/wangshengzhuang:/bin/bash

 

 

拓展项:-b -c

示例1:-b 指定字符

[root@xqzt ~]# tail -n 5 /etc/passwd |cut -b 2-4
sno
nom
cpd
box
ang

示例2:-c 指定汉字

[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

[rocrocket@rocrocket programming]$ cat cut_ch.txt |cut -nb 1,2,3
星
星
星
星