神兵利刃: Linux shell 之 cut 命令使用大全

如题所述

cut 是一个选取命令,它可以通过对行信息进行指定参数控制,来截取所需的信息。

基本语法:cut [-b [-n][first-last]] [-c [first-last]] [-d [char]] [-f [first-last]] [file ...]

cut 命令会从文件的每一行剪切字节、字符或字段,并将这些字节、字符或字段写至标准输出。如果不指定file参数,cut命令将读取标准输入。必须指定-b、-c或-f标志之一。

主要参数含义:--b: 以字节为单位进行分割;- -c: 以字符为单位进行分割;- -d: 自定义分隔符进行分割,默认为制表符号;- -f: 与-d一起使用,用分隔符分割后,指定显示哪些部分;- -n:取消分割多字节字符,仅和-b标志一起使用。

选取依据:接受三种选取定位方式。

下面依次展示使用方法。

以字节定位:当我们执行新建一个txt文件,命令为who.txt,其内容如下:

cat who.txt会输出以下类似的内容:

我们可以执行cat who.txt | cut -b 3,效果如下:

如果你还不懂|命令的含义,可以看这一篇文章神兵利刃:shell初入门。

-b定位会先将标志位从小到大排序再截取,打乱先后顺序再执行,效果和以上是一致的。

第9位之前(含第9位),cut -b -9;第9位之后(含第9位),cut -b 9-。

可以看到以上都包含了第9位,如果执行cut -b -9,9-:

第9位并不会重复,会完整显示整行。

以字符定位:如果是文本内容都是纯单字节字符,字符定位和字节定位的效果是一致的。譬如:

新建一个内容为以下字符串的week.txt。

对cat week.txt输出的流做截取,两个命令的区别就有了。-b会输出乱码,-c会输出预期内的效果。

因为-c以字符为单位,-b只会憨憨的以字节为单位来计算,输出的是乱码。

以字节定位,配合-n:上述我们看到了,-b当遇到多字节字符时,会显示乱码。但它还可以配合使用-n选项,-n用于告诉cut不要将多字节字符拆开。

例子如下:

注:以上效果是在Mac上的效果,Linux下可能会有区别,尤其是末尾的%不晓得是为啥。

以域(fileds)定位:对于上面的格式,-b或-c还游刃有余。但如果碰到/etc/passwd这样格式的内容,如下我们取倒数5行:

它看似没有任何规律,但又是有规律的。它是由:拼接而成的字符串,冒号用来隔开某一项,但每一行内容长度差别极大。

如果我们想取第一个冒号之前的内容,第二个-第三个冒号之间的内容,我们怎么办呢。

这个时候,以域定位就派上用场了,简单来说,就是先设置间隔符,再设置提取第几个域,就好了。

以上命令-d用来设置间隔符为冒号,然后又-f提取所需要的域。再回车,就出来了。开心吧。

-f也支持域连续截取,域多个截取。示例如下:

cut的短板:cut在处理多空格间隔的域时,比较麻烦,它擅长处理『以一个字符间隔』的文本内容。
温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜