cut命令从文件或命令输入中按照指定的规则提取想要的东西。它主要有两种用法,分别是
- 配合
-c
参数使用,来截取固定字符位置的内容 - 配合
-d
和-f
参数使用,用分隔符来split成多个部分,再选取某个或某几个部分
cut -cchars file
chars制定了你想从file中的每行内提出哪些字符(根据位置)。例如,
-c5
是取第5个字符。-c5,8
是取第5个和第8个字符,-c5-8
是取第5个到第8个字符,-c5-
是取第5个字符及其后面的所有字符。
下面是who
命令的输出结果
$ who
kite console Oct 4 16:40
kite ttys000 Oct 4 16:40
kite ttys001 Oct 9 16:41
我们使用管道(pipe)来使用cut。假设我们想拿到上次登录的时间,可以看出来登录的时间是从26到31个字符,所以使用下面的命令
$ who | cut -c26-31
16:40
16:40
16:41
上面是格式化好的内容,列号对齐的比较工整,但如果遇到列号不统一但使用了分隔符来分隔不同内容的文本,可以使用-d -f
参数来处理。
cut -dsplitter -findex
splitter是分隔符,该参数会将每一行的内容使用指定的分隔符生成一个数组,index是取的数组的索引,从1开始。index也可以像-c那样指定多个或指定一个范围
假设a.txt
的内容如下
nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false
root:*:0:0:System Administrator:/var/root:/bin/sh
daemon:*:1:1:System Services:/var/root:/usr/bin/false
这个文件的每一行都包括了好几类的内容,他们之间使用冒号:
分隔,我希望提取出用户名,用户名在第1部分
$ cut -d: -f1 a.txt
nobody
root
daemon
我还可以同时拿到用户名和角色,分别第1部分和第5部分
$ cut -d: -f1,5 a.txt
nobody:Unprivileged User
root:System Administrator
-d
参数如果省略的话,默认使用制表符\t