cut命令

来源:互联网 发布:淘宝老客户短信模板 编辑:程序博客网 时间:2024/05/18 11:26

cut是一个文本行选取命令,用于显示从N到M的字符。

一、其语法格式为:
cut  [-bn] [file] 
cut  [-c]  [file] 

cut  [-df] [file]


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

主要参数
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。

-f  :与-d一起使用,指定显示哪个区域。

-d :自定义分隔符,默认为制表符。

-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的范围之内,该字符将被写出;否则,该字符将被排除。

其中,b是bytes的首字母,c是characters,f是fields首字母,n是ignored中字母(此内容可用man命令查看而得)

cut详解:

linux每个命令都有它特殊的用途,只有知道为什么选择使用这个命令,我们才能更好的使用它。cut是用来“剪”文本中的行数据。所以cut首先要做的就是定位剪切的范围。

cut的-b、-c、-f参数说明“剪切”内容的最小单位(这就是为什么该三参数必选其一)。指定“剪切”的最小单位,接下来就是确定单位的长度。可使用整数进行范围限定。

以下是man cut的详细解释:

N      N'th byte, character or field, counted from 1
N-     from N'th byte, character or field, to end of line
N-M    from N'th to M'th (included) byte, character or field
-M     from first to M'th (included) byte, character or field

例:

[update@break ~]$ cat /etc/passwd  | cut -c 1-4,5
root:
bin:x
daemo
mail:
从中可以看出,可以使用N-M来表示一个表示范围的闭区间[N,M],同时当多个区间并存时,可以使用逗号“,”将其隔开。

上面的读取方式有点像fread( )函数进行二进制读取,不分空格及其它。如果想象fscanf( )函数那样对一行数据进行分隔读取,即针对非固定格式,可以使用域,即-f参数。

例:

[update@break ~]$ cat /etc/passwd  | cut -d: -f 1,2
root:x
bin:x
daemon:x
mail:x

对比一行完整的数据root:x:0:0:root:/root:/bin/bash,可知,-d参数利用字符“:”,把一行数据分解成一个字符串列表。联想Java中的String.split(":")方法,把该字符串分拆为

[root , x , 0 , 0 , root , /root , /bin/bash]。如果范围区间是[1,2],则把域1和域2的字符串用“:"拼接,并打印。此处需特别注意如果-d参数后跟的是单字符重复值,则只能分隔开单字符,与Java的String.split(" ")有很大的差别。例如:root:root::root:::root::::root,使用-d:后的list形如

[root , root , 空格, root , 空格,空格,root , 空格, 空格 , 空格 , root]

其中,-d是delimiter的首字母。默认是制表符。当是其它字符时,同上例书写格式。

对于-n参数,则是忽略按顺序读byte的规则,如果遇到多字节字符(汉字)时,-n可以告诉cut不要拆分多字节字符。


总结:cut是一个用来分割行文本的命令,在使用时,我们要指定分割的最小单位,使用参数b,c,f和分割的范围,使用N-M指定。当针对非固定格式时,可以使用域的概念。分割字符串时,

可以用-d参数指定用分割的标识字符。当处理汉字等多字节字符时,可以考虑使用-n参数。




0 0