cut 指令: 撷取档案每行指定范围资料


cut 指令可以将档案内每行资料, 选择性地撷取指定的部份, 对于 Log 分析或过滤资料十分好用, 当然除了支援撷取档案资料外, 也可以用管线 (pipe) 汇入资料, 以下教会是关于 cut 指令的用法。

cut 指令的语法:

cut [OPTION]… [FILE]…

cut 指令主要有以下参数可以:

-b: 输出指定的范围, 以 bytes 作为单位.
-c: 输出指定的范围, 以字符数量作为单位.
-d: 指定分隔字符, 默认是用 tab 作为分隔.
-f: 输出指定的范围, 这个是每行资料的第几个字段作为区分.
-s: 如果该行没有分隔字符, 不会显示该行资料.

现在看一看实际使用例子, 以下是 /etc/passwd 的内容:

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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin


例如我想从 /etc/passwd 撷取帐号名称及每个帐号的家目录, 即第 1 栏及第 6 栏, 可以用以下指令:

$ cut -d : -f 1,6 /etc/passwd

会有类似以下的输出:

root:/root
bin:/bin
daemon:/sbin
adm:/var/adm
lp:/var/spool/lpd
sync:/sbin
shutdown:/sbin
halt:/sbin
mail:/var/spool/mail

另一个用法是撷取指定位置的字串, 例如要撷取每行第 1 个至第 5 个字串, 可以这样:

$ cut -b 1-5 /etc/passwd

输出类似这样:

root:
bin:x
daemo
adm:x
lp:x:
sync:
shutd
halt:
mail:

以上撷取字符的方法, 实际上很多情况会用上, 例如用 “ls -l” 查看目录资料, 其中关于权限的部份是第 1 个至第 10 个字符, 指令是这样:

$ ls -l | cut -c 1-10

只会输出每个档案及目录的权限:

total 6200
drwxr-xr-x
drwx——
-rw-r–r–
-rw——-
-rw——-
-rw——-
-rw——-

Leave a Reply