cut命令小结

基本功能

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文档中的。

cut命令小结_第1张图片

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


这里的例子都是域模式,其实字节模式一样的,在这里就不举例了。

本文完毕!


你可能感兴趣的:(linux学习记录,工具学习)