1.简介
cut命令用于从文件或者标准输入中读取内容并截取每一行的特定部分并送到标准输出。它是以每一行为一个处理对象的,这种机制和sed是一样的。
2.cut命令主要是接受三个定位方法
第一,字节(bytes),用选项-b
第二,字符(characters),用选项-c
第三,域(fields),用选项-f
3.语法
cut -c/-b list [file...]
cut -f list [-d delim] [file] 或者 cut [-d delim] -f list
-b:按字节截取方式
wytzxd@ubuntu:~/Workstation/Slearn/5.25$ whowytzxd tty7 2011-05-25 09:01 (:0)
wytzxd pts/0 2011-05-25 09:34 (:0)
wytzxd@ubuntu:~/Workstation/Slearn/5.25$ who | cut -b 3 //在-b后面必须指定数字,表示要截取哪个字节
t
t
wytzxd@ubuntu:~/Workstation/Slearn/5.25$ who | cut -b 2,3-5,10 //想要截取多个的写法 ,
ytzxt
ytzxp
但有一点要注意,cut命令如果使用了-b选项,那么执行此命令时,cut会先把-b后面所有的定位进行从小到大排序,然后再提取。不能颠倒定位的顺序。
eg:
wytzxd@ubuntu:~/Workstation/Slearn/5.25$ who | cut -b 3-5,10,2 //结果与上面相同
ytzxt
ytzxp
其他:
wytzxd@ubuntu:~/Workstation/Slearn/5.25$ who | cut -b 3- //第三个字符以及后面所有tzxd tty7 2011-05-25 09:01 (:0)
tzxd pts/0 2011-05-25 09:34 (:0)
wytzxd@ubuntu:~/Workstation/Slearn/5.25$ who | cut -b -3 //第三个字符以及前面所有
wyt
wyt
而
wytzxd@ubuntu:~/Workstation/Slearn/5.25$ who | cut -b -3,3- //第三个字符不会重复wytzxd tty7 2011-05-25 09:01 (:0)
wytzxd pts/0 2011-05-25 09:34 (:0)
-c:按字符截取方式
wytzxd@ubuntu:~/Workstation/Slearn/5.25$ who | cut -c 3,5tx
tx
不过,看着怎么和-b没有什么区别啊?莫非-b和-c作用一样? 其实不然,看似相同,只是因为这个例子举的不好,who输出的都是单字节字符,所以用-b和-c没有区别,如果你提取中文,区别就看出来了,来,看看中文提取的情况:
(-c也是乱码,没解决)
cut -c num1-num2 filename 说明:显示每行从开头算起 num1 到 num2 的文字
who | cut -c 1-10wytzxd t
wytzxd p
-f list:按字段截取
list为字段编号或一段范围的列表(以逗号隔开)
-d delim:通过-f选项,使用delim作为定界符。默认的定界符为制表符(Tab)
wytzxd@ubuntu:~/Workstation/Slearn/5.25$ cat cut_fwang,yan,ting
wang,yan,lun
zuo,hai,zhi
wytzxd@ubuntu:~/Workstation/Slearn/5.25$ cut -d , -f 3 cut_f //以逗号为分隔符
ting
lun
zhi
-b,-c 和 -f 参数可以跟以下子参数:
N 第N个字符或字段
N- 从第一个字符或字段到文件结束
N-M 从第N个到第M个字符或字段
-M 从第一个到第N个字符或字段
wytzxd@ubuntu:~/Workstation/Slearn/5.25$ cut -d , -f 1,3 cut_f > test1
wytzxd@ubuntu:~/Workstation/Slearn/5.25$ cat test1
wang,ting
wang,lun
zuo,zhi
注意:
1.如果遇到空格和制表符时,怎么分辨呢?
有时候制表符确实很难辨认,有一个方法可以看出一段空格到底是由若干个空格组成的还是由一个制表符组成的。
wytzxd@ubuntu:~/Workstation/Slearn/5.25$ cat cut_twang yan ting
wytzxd@ubuntu:~/Workstation/Slearn/5.25$ sed -n l cut_t //sed -n后面的字符是L的小写字母
wang yan\tting$
2.我应该在cut -d中用什么符号来设定制表符或空格
默认为tab键;所以当你就是要使用制表符的时候,完全就可以省略-d选项,而直接用-f来取域。
wytzxd@ubuntu:~/Workstation/Slearn/5.25$ cut -f 1 cut_t
wang yan
wytzxd@ubuntu:~/Workstation/Slearn/5.25$ cut -f 2 cut_t
ting
如果你设定一个空格为间隔符,那么就这样:
wang
wytzxd@ubuntu:~/Workstation/Slearn/5.25$ cut -f 2 -d ' ' cut_t
wytzxd@ubuntu:~/Workstation/Slearn/5.25$ cut -f 3 -d ' ' cut_t
yan ting
为什么第二个例子会是空??
因为你只能在-d后面设置一个空格,不许设置多个空格,因为cut只允许间隔符是一个字符;
此例中,wang后有两个空格,所以以一个为定界符后,另一个以字符形式输出;
如果文件里面的某些域是由若干个空格来间隔的,那么用cut就有点麻烦了,因为cut只擅长处理“以一个字符间隔”的文本内容。
标签:wytzxd,Workstation,cut,Ubuntu,命令,5.25,Slearn,ubuntu From: https://www.cnblogs.com/neil2151/p/16848006.html