Linux指令中之cut

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux指令中之cut相关的知识,希望对你有一定的参考价值。

参考技术A 用法:cut -cnum1-num2 filename   说明:显示每行从开头算起 num1 到 num2 的文字。   范例:   shell>> cat example   test2   this is test1   shell>> cut -c1-6 example ## print 开头算起前 6 个字元 从1开始计数   test2   this i   可以将一行分割成多列,通过-d ':',将分隔符改为:。再通过-f n指定选用的列。   如:   $ echo 12:00:01 | cut -d ':' -f 2   00   Cut()   功能 将数据窗口控件当前行列上编辑框中的所选内容剪切掉并保存到系统剪贴板,对RichText 风格的数据窗口来说 把数据窗口控件中所选内容剪切到系统剪贴板   语法 dwcontrol.Cut ()   参数 dwcontrol 数据窗口控件名   -b, --bytes bytd-list:只输出在byte-list区间的bytes,TABs和backspaces都占1byte。   [1]-c, --characters character-list:只输出在区间character-list内的字符TABs和backspaces都占一个字符。   -f, --fields field-list:只输出在field-list内的域。   -d, --delimiter delim:指定在-f参数中的field-list的分割符(为delim中的第一个字符,缺省为TAB)。   -n:不分割多byte的字符。   -s, --only-delimited:在-f参数中不输出没有域分割符的行。   --help:在标准输出上输出帮助信息并退出。   --version:在标准输出上输出版本信息并退出。   返回值 Long 函数执行成功时返回剪切的字符个数 如果在编辑控件中未选择任何内容 则不剪切任何字符, 函数返回0 如果函数执行出错 则返回-1 ,如果dwcontrol 的值为NULL,则Cut()函数返回NULL   用法 除了程序中使用Cut()函数剪切数据窗口控件上编辑框中所选内容外 用户使用键盘 按Ctrl+X 或鼠标同样可以复制所选内容,代码中可以使用数据窗口控件对象函数

Linux cut命令

cut是一个选取命令,就是将一段数据经过分析,取出我们想要的。

1 语法格式
cut  [-bn] [file] 或 cut [-c] [file]  或  cut [-df] [file]

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

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

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

  -c :以字符为单位进行分割。
  -d :自定义分隔符,默认为制表符。
    -f  :与-d一起使用,指定显示哪个区域

 

2 原理

cut一般以什么为依据呢? 也就是说,我怎么告诉cut我想定位到的剪切内容呢?

cut命令主要是接受三个定位方法:

(1)字节(bytes),用选项-b

(2)字符(characters),用选项-c

(3)域(fields),用选项-f

 

3 举例

(1) 按照字节cut

[[email protected] programming]$ who
rocrocket :0           2009-01-08 11:07
rocrocket pts/0        2009-01-08 11:23 (:0.0)
rocrocket pts/1        2009-01-08 14:15 (:0.0)

如果我们想提取每一行的第3个字节,就这样:

[[email protected] programming]$ who|cut -b 3
c
c
c

  

如果“字节”定位中,我想提取第3,第4、第5和第8个字节,怎么办?

-b支持形如3-5的写法,而且多个定位之间用逗号隔开就成了。看看例子吧:

[[email protected] programming]$ who|cut -b 3-5,8
croe
croe
croe


但有一点要注意,cut命令如果使用了-b选项,那么执行此命令时,cut会先把-b后面所有的定位进行从小到大排序,然后再提取。可不能颠倒定位的顺序哦。这个例子就可以说明这个问题:

[[email protected] programming]$ who|cut -b 8,3-5
croe
croe
croe

 

(2) 按字符cut

[[email protected] programming]$ cat cut_ch.txt
星期一
星期二
星期三
星期四
[[email protected] programming]$ cut -b 3 cut_ch.txt
?
?
?
?
[[email protected] programming]$ cut -c 3 cut_ch.txt
一
二
三
四

(3)按域cut

  为什么会有“域”的提取呢,因为刚才提到的-b和-c只能在固定格式的文档中提取信息,而对于非固定格式的信息则束手无策。这时候“域”就派上用场了。如果你观察过/etc/passwd文件,你会发现,它并不像who的输出信息那样具有固定格式,而是比较零散的排放。但是,冒号在这个文件的每一行中都起到了非常重要的作用,冒号用来隔开每一个项。

我们很幸运,cut命令提供了这样的提取方式,具体的说就是设置“间隔符”,再设置“提取第几个域”,就OK了!

以/etc/passwd的前五行内容为例:

[[email protected] programming]$ cat /etc/passwd|head -n 5
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[[email protected] programming]$ cat /etc/passwd|head -n 5|cut -d : -f 1
root
bin
daemon
adm
lp

用-d来设置间隔符为冒号,然后用-f来设置我要取的是第一个域,再按回车,所有的用户名就都列出来了

当然,在设定-f时,也可以使用例如3-5或者4-类似的格式

[[email protected] programming]$ cat /etc/passwd|head -n 5|cut -d : -f 1,3-5
root:0:0:root
bin:1:1:bin
daemon:2:2:daemon
adm:3:4:adm
lp:4:7:lp
[[email protected] programming]$ cat /etc/passwd|head -n 5|cut -d : -f 1,3-5,7
root:0:0:root:/bin/bash
bin:1:1:bin:/sbin/nologin
daemon:2:2:daemon:/sbin/nologin
adm:3:4:adm:/sbin/nologin
lp:4:7:lp:/sbin/nologin
[[email protected] programming]$ cat /etc/passwd|head -n 5|cut -d : -f -2
root:x
bin:x
daemon:x
adm:x
lp:x

  

以上是关于Linux指令中之cut的主要内容,如果未能解决你的问题,请参考以下文章

linux常用指令

Linux从青铜到王者第一篇:Linux常见指令

Linux入门第一篇:Linux下的基本指令(超详解)

Linux编程一Linux常见指令和权限理解(思维导图总结)

Linux编程一Linux常见指令和权限理解(思维导图总结)

Linux编程一Linux常见指令和权限理解(思维导图总结)