cut命令小结

    xiaoxiao2021-03-26  21

    基本功能

    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

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

    本文完毕!

    转载请注明原文地址: https://ju.6miu.com/read-658298.html

    最新回复(0)