基本功能
cut是一个很简单的命令,但是却是很实用的一个linux命令。
cut将输入流以行为单位,以一定的条件切割,最后将结果打印在标准输出(stdout)。输入流一般是一个文件名,当没有指定文件名或者直接指定"-"时表明直接从标准输入(stdin)中取流。
语法格式
cut的语法格式极其简单:
cut OPTION [FILE]
那么重点就是掌握以及记忆cut命令的OPTION了。
首先我们需要了解cut命令操作输入流的模式有哪些。很简单,就两种模式,一个是字节模式(byte mode),一个是域模式(field mode)。
根据这两种模式,我将cut命令的OPTION分为3组。
第一组:
-b,--bytes=LIST
-c,--characters=LIST
第二组:
-d,--delimiter=DELIM 指定DELIM为分隔符(注意只能是单个字符),而不是默认的TAB
-f,--fields=LIST 默认包括不含分隔符的行
-s,--only-delimited 表示不包括那些不含分隔符的行,用于去掉注释或者标题一类的信息
第三组:
--complement 反向输出结果
--output-delimiter=STRING 使用STRING为输出的分隔符,而不是默认的输入分隔符
好了,为什么我要这么分组呢?理由是这样的:
第一组对应字节模式。-b和-c其实都是对应字节模式。网上有文章说它俩在处理中文时有区别,我觉得是不正确的,可能与字符编码有关系吧,目前我不得而知。
第二组对应域模式。通过-d来自定义指定DELIM来切割文本,并且通过-f指定最终输出哪些field。而选项-s只能在域模式中使用,也就是说字节模式下不能使用-s选项。
第三组是通用选项,跟处理模式没有关系,也就是说两种模式下都可以使用。
OK,到了这里,我们知道cut处理输入流有两种模式,每一次只能使用其中的一个模式。
你可能注意到上面的三个LIST我特定标注为红色。关于LIST的指定方式是cut命令灵活性的一个体现。这里直接截图man文档中的。
N: 只取第N项(从1开始计数)
N-:取第N项一直到最后
N-M:取第N项到第M项
-M:取第1项到第M项
实际例子
现在通过实际的例子来记忆上述选项。这里通过打印PATH环境变量为例!
[11:03:09@astrol:~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
(1)选取第3个路径
[10:59:05@astrol:~]# echo $PATH | cut -d ':' -f3
/usr/sbin
(2)选取从第3个路径开始所有的路径
[11:00:20@astrol:~]# echo $PATH | cut -d ':' -f3-
/usr/sbin:/usr/bin:/sbin:/bin
(3)选取第3到第5个路径
[11:00:58@astrol:~]# echo $PATH | cut -d ':' -f3-5
/usr/sbin:/usr/bin:/sbin
(4)选取从第1个到第4个路径
[11:01:31@astrol:~]# echo $PATH | cut -d ':' -f-4
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
(5)选取第1个和第3个路径
[11:02:24@astrol:~]# echo $PATH | cut -d ':' -f1,3
/usr/local/sbin:/usr/sbin
(6)选取第1个到第3个路径,还有第5个路径
[11:02:50@astrol:~]# echo $PATH | cut -d ':' -f1-3,5
/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin
(7)选取除第3个路径的所有路径
[11:05:39@astrol:~]# echo $PATH | cut -d ':' -f3 --complement
/usr/local/sbin:/usr/local/bin:/usr/bin:/sbin:/bin
(8)改变分隔符为@
[11:06:14@astrol:~]# echo $PATH | cut -d ':' -f1- --output-delimiter='@'
/usr/local/sbin@/usr/local/bin@/usr/sbin@/usr/bin@/sbin@/bin
这里的例子都是域模式,其实字节模式一样的,在这里就不举例了。
本文完毕!