概述

  在每个文件FILE的各行中, 把提取的片断显示在标准输出。用来显示行中的指定部分,删除文件中指定字段。cut经常用来显示文件的内容。


本文基于:cut (GNU coreutils) 8.4


语法

cut OPTION... [FILE]...

选项

OptionsOptionsOptionsOptions详细说明
-b, - -bytes=LIST以字节为单位进行分割,输出指定的字节。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志
-c, - -characters=LIST以字符为单位进行分割,输出指定的字符
-d, - -delimiter=DELIM自定义分隔符,默认为制表符。即使用 DELIM 取代TAB做字段(field)分隔符,该参数只在配合-f使用
-f, - -fields=LIST输出指定的字段,与-d一起使用,指定显示哪个区域
-n取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的范围之内,该字符将被写出;否则,该字符将被排除
–complement补足被选择的字节、字符或字段
-s, - -only-delimited不显示没有分隔符的行
- -output-delimiter=STRING使用STRING作为输出分隔符, 缺省(的输出分隔符) 为输入分隔符
- -help显示 帮助信息, 然后 结束
- -version显示 版本信息, 然后 结束

使用且只使用 -b, -c 或 -f 中的 一个选项. LIST由 一个 范围 (range) 或 逗号隔开的多个范围组成. 范围是下列 形式 之一:

形式描述
N第N 个字节, 字符或字段, 从1计数 起
N-从 第N 个字节, 字符或字段直至行尾
N-M从 第N到第M (并包括 第M) 个字节, 字符或字段
-M从第1到第M (并包括 第M) 个字节, 字符或字段

如果没有指定文件 FILE, 或FILE是-, 就从标准输读取数据.

实例

写在开始之前的话:
1、一个空格算一个字节,一个汉字算三个字节
2、cut命令如果使用了-b选项,那么执行此命令时,cut会先把-b后面所有的定位进行从小到大排序,然后再提取。不能颠倒定位的顺序!
已存在文件testCut.txt

[root@wmstianjin16172 ~]# vim testCut.txt 

这是测试多字节字符的的行,针对-n设计的用例
-rw-r--r--   1 root root    57344 Jul 19 17:09 a
-rw-------.  1 root root     2132 May 11 02:35 anaconda-ks.cfg
-rw-r--r--   1 root root  9147719 May 22 15:06 filebeat-5.3.0-x86_64.rpm
-rw-r--r--   1 root root    17142 May 16 20:21 initialization.log
-rw-r--r--.  1 root root    32415 May 11 02:35 install.log
-rw-r--r--.  1 root root     6996 May 11 02:34 install.log.syslog
drwxr-xr-x   3 root root     4096 Jun 27 10:54 perfmon
drwxr-xr-x   2 root root     4096 May 16 20:21 repo
drwxr-xr-x   3 root root     4096 May 16 20:19 searchsoft
drwxr-xr-x  17 root root     4096 May 16 20:18 soft
-rw-r--r--   1 root root    80009 Oct 26  2012 ssh.tar.gz
-rw-r--r--   1 root root      937 Jul 20 10:46 test.csv
drwxr-xr-x   3 root root     4096 May 16 20:21 tools
-rw-r--r--.  1 root root 14622355 May  5  2016 zabbix_agent_DDapp-2.2.3-1.x86_64.rpm

1、按字节选取前10个字节

[root@wmstianjin16172 ~]#cut -b1-10 testCut.txt 
[root@wmstianjin16172 ~]#cut -b1,2,3,4,5,6,7,8,9,10 testCut.txt 
[root@wmstianjin16172 ~]#cut --bytes=1,2,3,4,5,6,7,8,9,10 testCut.txt 
[root@wmstianjin16172 ~]#cut --bytes=1-10 testCut.txt 

2、按字符选取前10个字符

[root@wmstianjin16172 ~]#cut -c1-10 testCut.txt 
[root@wmstianjin16172 ~]#cut -c1,2,3,4,5,6,7,8,9,10 testCut.txt 
[root@wmstianjin16172 ~]#cut --characters=1,2,3,4,5,6,7,8,9,10 testCut.txt 
[root@wmstianjin16172 ~]#cut --characters=1-10 testCut.txt 

3、使用字段域选取(结合-d自定义分隔符)
-b和-c只能在固定格式的文档中提取信息,而对于非固定格式的信息则无法流畅的处理。但字段域能够很好的处理,不固定长度,使用固定分割。

[root@wmstianjin16172 ~]# cut -f1-2 testCut.txt
[root@wmstianjin16172 ~]# cut -f1-2 testCut.txt
[root@wmstianjin16172 ~]# cut -dx -f1-2 testCut.txt
[root@wmstianjin16172 ~]# cut -dx -f1,2 testCut.txt

4、当遇到多字节字符时,可以使用-n选项,-n用于告诉cut不要将多字节字符拆开

[root@wmstianjin16172 ~]#cut -nb1-2 testCut.txt 
[root@wmstianjin16172 ~]#cut -nb1-3 testCut.txt 

具体解释见-n参数说明。一个汉字为3个字节所以第一条命令没有输出第一行的”这”字,因为使用-n不可拆分
5、–complement 选项提取指定字段之外的列(不打印除某字段域—由f指定)

cut -dx -f1 --complement testCut.txt

6、不显示没有分隔符的行

[root@wmstianjin16172 ~]#cut -dZ -s testCut.txt 
[root@wmstianjin16172 ~]#cut -dZ --only-delimited testCut.txt 

7、指定输出的分隔符

[root@wmstianjin16172 ~]#cut -dx --output-delimiter="Q" testCut.txt 

原文链接
欢迎拍砖,未完待续……

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐