0%

cut 使用详解

cut 命令 用来显示行中的指定部分,删除文件中指定字段。cut 经常用来显示文件的内容,类似于 type 命令。

1
2
3
语法: cut -b list [-n] [file ...]
cut -c list [file ...]
cut -f list [-s] [-d delim] [file ...]

使用说明:

cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。

如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。

参数:
1
2
3
4
5
6
-b :以[字节]为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以[字符]为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的
范围之内,该字符将被写出;否则,该字符将被排除

例子

1
2
3
4
5
$ who
michaelxu console Aug 17 15:44
michaelxu ttys001 Aug 29 08:58
michaelxu ttys002 Aug 29 08:55
michaelxu ttys003 Aug 29 09:13
1
2
3
4
5
$ who | cut -b 3-5
cha
cha
cha
cha

-c 与 -b 的区别

1
2
3
4
5
$ cat cut_ch.txt
星期一
星期二
星期三
星期四

用-c则会以字符为单位,输出正常;而-b只会傻傻的以字节(8位二进制位)来计算,输出就是乱码。

1
2
3
4
5
$ cut -b 3 cut_ch.txt




1
2
3
4
5
$ cut -c 3 cut_ch.txt




也可以使用-nb来实现中文的输入

1
2
3
4
5
$ cat cut_ch.txt |cut -nb 8,9




分隔符-d与-f(域)

cut同过-d + 分隔符来将字符串分隔开,然后通过-f 来从这些被分隔开的域中提取数据

-b 默认是以制表符做分割

1
2
3
4
5
6
$ cat /etc/passwd|head -n 5
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
1
2
3
4
5
6
$ cat /etc/passwd|head -n 5|cut -d : -f 1
root
bin
daemon
adm
lp
1
2
3
4
5
6
$ cat /etc/passwd|head -n 5|cut -d : -f 1,3-5
root:0:0:root
bin:1:1:bin
daemon:2:2:daemon
adm:3:4:adm
lp:4:7:lp
1
2
3
4
5
6
$ cat /etc/passwd|head -n 5|cut -d : -f 1,3-5,7
root:0:0:root:/bin/bash
bin:1:1:bin:/sbin/nologin
daemon:2:2:daemon:/sbin/nologin
adm:3:4:adm:/sbin/nologin
lp:4:7:lp:/sbin/nologin