cut命令
cut命令
选项说明
cut命令将行按指定的分隔符分割成多列,它的弱点在于不好处理多个分隔符重复的情况,因此经常结合tr的压缩功能。
1 | -b:按字节筛选; |
假设/tmp/abc.sh中下面所示的内容。注意:第2行到第5行每列不是都以单个空格分隔的,有的地方重复了几个空格,有的地方只有一个空格,也就是说,文本内容不是很规则。并且最后一行完全没有空格。
1 | [root@xuexi tmp]# cat abc.sh |
下面是cut的示例。
按字段筛选
在abc.sh中有5个字段。筛选出第二字段name列和第4字段mark列。使用空格作为分隔符。
1 | [root@xuexi tmp]# cut -d" " -f2,4 abc.sh |
可以看到,输出的是乱七八糟的非预期结果。原因就是分隔符空格在分隔的地方重复了多次。所以想要正确显示结果,需要把重复空格处理掉。
可以使用tr工具来压缩连续字符。
1 | [root@xuexi tmp]# cat abc.sh | tr -s " " | cut -d " " -f2,4 |
但是输出中的最后一行中完全没有定界符的行也输出了,这需要使用-s
来取消这样的输出。
1 | [root@xuexi tmp]# cut -d" " -f2,4 abc.sh -s |
使用–complement
输出除了第2字段和第4字段其余的所有字段。
1 | [root@xuexi tmp]# cut -d" " -f2,4 abc.sh -s --complement |
按字节或字符分割
英文和阿拉伯数字是单字节字符,中文是双字节字符,甚至是3字节字符。
使用-b
来按字节筛选,使用-c
按字符分割。
注意,按字节或字符分割时将不能指定-d
,因为-d
是划分字段的。
1 | [root@xuexi tmp]# cut -b1-3 abc.sh # 筛选第1-3个字节的内容 |
由于筛选中文,结果中出现乱码。
1 | [root@xuexi tmp]# cut -b20 abc.sh |
所以-b
选项需要结合-n
选项,以禁止-b
选项将多字节的字符强行分割导致乱码。
1 | [root@xuexi tmp]# cut -n -b20 abc.sh |
也可以按字符分隔。
1 | [root@xuexi tmp]# cut -c20 abc.sh |
使用–output-delimiter
使用--output-delimiter
指定输出分隔符。
使用-b
或者-c
分隔了多段字符时,可以使用--output-delimiter
,否则这些多段将拼接在一起。
1 | # 拼接在一起 |
cut中的范围指定
可以使用N-
、N-M
和-M
分别表示每行N字符(或字节或字段)后的所有内容、N-M
段内容和M段之前的内容。注意包括N和M的边界。
1 | # 输出第三字段和后面所有的内容 |
范围交叉时,不会重复输出。比如-f3-5,4-6
,则输出-f3-6
。
1 | # 范围交叉 |
如果范围顺序无序,则Linux会先对范围排序(升序)再输出。例如-f4-6,2
等价于-f2,4-6
。
1 | [root@xuexi tmp]# cut -d" " -f4-6,2 abc.sh -s |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 骏马金龙!
评论