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
…
…
…
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
…
…
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:
…
…
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——-
…
…
drwxr-xr-x
drwx——
-rw-r–r–
-rw——-
-rw——-
-rw——-
-rw——-
…
…