Linux 系统文本行截取工具cut

2015-08-13 0 By admin

remove sections from each line of files.
从文件中的每行数据中删除指定的字符|字节|域。
cut命令的使用方法:主要是怎么对一行数据进行定位处理。

一、常用选项

-b :字节(bytes) 一个英文字母的长度
-n :和-b一起使用,不分割多字节字符。
-c :字符(characters) 一个完整字符的定义:中文占用两个字符,英语占用一个字符。
-f :域(fields) 根据分割符号,将一行分割为多个部分和-d一起用。

二、使用示例

1、想提取每一行的第3个字节
$ who|cut -b 3
c
c

2、提取第3,第4、第5和第8个字节
$ who|cut -b 3-5,8
croe
croe

3、-b会对定位数字进行排序后,再提取一行中指定的字符
$ who|cut -b 8,3-5
croe
croe

4、从第一个字节到第三个字节
$ who|cut -b -3
roc
roc

5、从第三个字节到行尾
$ who|cut -b 3-
crocket :0 2009-01-08 11:07
crocket pts/0 2009-01-08 11:23 (:0.0)

6、因为会对位内容排序,所以不会出现第3个字符重复的情况
$ who|cut -b -3,3-
rocrocket :0 2009-01-08 11:07
rocrocket pts/0 2009-01-08 11:23 (:0.0)

7、分隔符问题
有时候制表符确实很难辨认,有一个方法可以看出一段空格到底是由若干个空格组成的还是由一个制表符组成的。
$ sed -n l tab_space.txt
this is tab\tfinish.$
this is several space finish.$

看到了吧,如果是制表符(TAB),那么会显示为\t符号,如果是空格,就会原样显示。
8、设定分隔符
cut的-d选项的默认间隔符就是制表符,如果你设定一个空格为间隔符,那么就这样:
$ cat tab_space.txt |cut -d ' ' -f 1
this
this

而且,你只能在-d后面设置一个空格,可不许设置多个空格,因为cut只允许间隔符是一个字符。
9、pscut命令配合使用时,怎么总是在最后两行出现重复现象。
$ ps
PID TTY TIME CMD
2977 pts/0 00:00:00 bash
5032 pts/0 00:00:00 ps


[localhost]$ ps|cut -b3
P
9
0
0

ps|cut会自身创建一个进程,所以当ps时也会提取出这个进程,然后通过管道输出到cut。
所以cut截取后,就多出了一行,之所以会重复上一行内容,是由于我们恰巧取到了和上一行内容相同的字符而已。
10、cut有哪些缺陷和不足
在处理多空格时,如果文件里面的某些域是由若干个空格来间隔的,那么用cut就有点麻烦了,因为cut只擅长处理“以一个字符间隔”的文本内容。