Linux之cut用法[下载]

上传人:油条 文档编号:12462036 上传时间:2017-10-19 格式:DOC 页数:5 大小:34.50KB
返回 下载 相关 举报
Linux之cut用法[下载]_第1页
第1页 / 共5页
Linux之cut用法[下载]_第2页
第2页 / 共5页
Linux之cut用法[下载]_第3页
第3页 / 共5页
Linux之cut用法[下载]_第4页
第4页 / 共5页
Linux之cut用法[下载]_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《Linux之cut用法[下载]》由会员分享,可在线阅读,更多相关《Linux之cut用法[下载](5页珍藏版)》请在金锄头文库上搜索。

1、Linux 之 cut 用 法cut 是一个选取命令,就是将一段数据经过分析,取出我们想要的。一般来说,选取信息通常是针对“行”来进行分析的,并不是整篇信息分析的。(1)其语法格式为:cut -bn file 或 cut -c file 或 cut -df file使用说明cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。主要参数-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。-c :以字符为单位进行分割。-d :自定义分

2、隔符,默认为制表符。-f :与-d 一起使用,指定显示哪个区域。-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的范围之内,该字符将被写出;否则,该字符将被排除。(2)cut 一般以什么为依据呢? 也就是说,我怎么告诉 cut 我想定位到的剪切内容呢?cut 命令主要是接受三个定位方法:第一,字节(bytes),用选项-b第二,字符(characters),用选项-c第三,域(fields),用选项-f(3)以“字节”定位举个例子吧,当你执行 ps 命令时,会输出类似如下的内容:rocrocketrocrocket progr

3、amming$ whorocrocket :0 2009-01-08 11:07rocrocket pts/0 2009-01-08 11:23 (:0.0)rocrocket pts/1 2009-01-08 14:15 (:0.0)如果我们想提取每一行的第 3 个字节,就这样:rocrocketrocrocket programming$ who|cut -b 3ccc(4) 如果“字节”定位中,我想提取第 3,第 4、第 5 和第 8 个字节,怎么办?-b 支持形如 3-5 的写法,而且多个定位之间用逗号隔开就成了。看看例子吧:rocrocketrocrocket programming

4、$ who|cut -b 3-5,8croecroecroe但有一点要注意,cut 命令如果使用了-b 选项,那么执行此命令时,cut 会先把-b 后面所有的定位进行从小到大排序,然后再提取。可不能颠倒定位的顺序哦。这个例子就可以说明这个问题:rocrocketrocrocket programming$ who|cut -b 8,3-5croecroecroe(5) 还有哪些类似“3-5”这样的小技巧,列举一下吧!rocrocketrocrocket programming$ whorocrocket :0 2009-01-08 11:07rocrocket pts/0 2009-01-08

5、 11:23 (:0.0)rocrocket pts/1 2009-01-08 14:15 (:0.0)rocrocketrocrocket programming$ who|cut -b -3rocrocrocrocrocketrocrocket programming$ who|cut -b 3-crocket :0 2009-01-08 11:07crocket pts/0 2009-01-08 11:23 (:0.0)crocket pts/1 2009-01-08 14:15 (:0.0)想必你也看到了,-3 表示从第一个字节到第三个字节,而 3-表示从第三个字节到行尾。如果你细心,

6、你可以看到这两种情况下,都包括了第三个字节“c”。如果我执行 who|cut -b -3,3-,你觉得会如何呢?答案是输出整行,不会出现连续两个重叠的 c的。看:rocrocketrocrocket programming$ who|cut -b -3,3-rocrocket :0 2009-01-08 11:07rocrocket pts/0 2009-01-08 11:23 (:0.0)rocrocket pts/1 2009-01-08 14:15 (:0.0)(6)给个以字符为定位标志的最简单的例子吧!下面例子你似曾相识,提取第 3,第 4,第 5 和第 8 个字符:rocrocket

7、rocrocket programming$ who|cut -c 3-5,8croecroecroe不过,看着怎么和-b 没有什么区别啊?莫非-b 和-c 作用一样? 其实不然,看似相同,只是因为这个例子举的不好,who 输出的都是单字节字符,所以用-b 和-c 没有区别,如果你提取中文,区别就看出来了,来,看看中文提取的情况:rocrocketrocrocket programming$ cat cut_ch.txt星期一星期二星期三星期四rocrocketrocrocket programming$ cut -b 3 cut_ch.txtrocrocketrocrocket progra

8、mming$ cut -c 3 cut_ch.txt一二三四看到了吧,用-c 则会以字符为单位,输出正常;而-b 只会傻傻的以字节(8 位二进制位)来计算,输出就是乱码。既然提到了这个知识点,就再补充一句,如果你学有余力,就提高一下。当遇到多字节字符时,可以使用-n 选项,-n 用于告诉 cut 不要将多字节字符拆开。例子如下:rocrocketrocrocket programming$ cat cut_ch.txt |cut -b 2rocrocketrocrocket programming$ cat cut_ch.txt |cut -nb 2rocrocketrocrocket pro

9、gramming$ cat cut_ch.txt |cut -nb 1,2,3星星星星(7)域是怎么回事呢?解释解释:)为什么会有“域”的提取呢,因为刚才提到的-b 和-c 只能在固定格式的文档中提取信息,而对于非固定格式的信息则束手无策。这时候“域”就派上用场了。如果你观察过/etc/passwd 文件,你会发现,它并不像 who 的输出信息那样具有固定格式,而是比较零散的排放。但是,冒号在这个文件的每一行中都起到了非常重要的作用,冒号用来隔开每一个项。我们很幸运,cut 命令提供了这样的提取方式,具体的说就是设置“间隔符”,再设置“提取第几个域”,就 OK 了!以/etc/passwd 的

10、前五行内容为例:rocrocketrocrocket programming$ cat /etc/passwd|head -n 5root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinrocrocketrocrocket programming$ cat /etc/passwd|head -n 5

11、|cut -d : -f 1rootbindaemonadmlp看到了吧,用-d 来设置间隔符为冒号,然后用-f 来设置我要取的是第一个域,再按回车,所有的用户名就都列出来了!呵呵 有成就感吧!当然,在设定-f 时,也可以使用例如 3-5 或者 4-类似的格式:rocrocketrocrocket programming$ cat /etc/passwd|head -n 5|cut -d : -f 1,3-5root:0:0:rootbin:1:1:bindaemon:2:2:daemonadm:3:4:admlp:4:7:lprocrocketrocrocket programming$ c

12、at /etc/passwd|head -n 5|cut -d : -f 1,3-5,7root:0:0:root:/bin/bashbin:1:1:bin:/sbin/nologindaemon:2:2:daemon:/sbin/nologinadm:3:4:adm:/sbin/nologinlp:4:7:lp:/sbin/nologinrocrocketrocrocket programming$ cat /etc/passwd|head -n 5|cut -d : -f -2root:xbin:xdaemon:xadm:xlp:x(8)如果遇到空格和制表符时,怎么分辨呢?我觉得有点乱,怎

13、么办?有时候制表符确实很难辨认,有一个方法可以看出一段空格到底是由若干个空格组成的还是由一个制表符组成的。rocrocketrocrocket programming$ cat tab_space.txtthis is tab finish.this is several space finish.rocrocketrocrocket programming$ sed -n l tab_space.txtthis is tabtfinish.$this is several space finish.$看到了吧,如果是制表符(TAB),那么会显示为t 符号,如果是空格,就会原样显示。通过此方法

14、即可以判断制表符和空格了。注意,上面 sed -n 后面的字符是 L 的小写字母哦,不要看错。(9)我应该在 cut -d 中用什么符号来设定制表符或空格呢?其实 cut 的-d 选项的默认间隔符就是制表符,所以当你就是要使用制表符的时候,完全就可以省略-d 选项,而直接用f 来取域就可以了。如果你设定一个空格为间隔符,那么就这样:rocrocketrocrocket programming$ cat tab_space.txt |cut -d -f 1thisthis注意,两个单引号之间可确实要有一个空格哦,不能偷懒。而且,你只能在-d 后面设置一个空格,可不许设置多个空格,因为 cut 只允许间隔符是一个字符。rocrocketrocrocket programming$ cat tab_space.txt |cut -d -f 1cut: the delimiter must be a single characterTry cut -help for more information.(10)cut 有哪些缺陷和不足?猜出来了吧?对,就是在处理多空格时。如果文件里面的某些域是由若干个空格来间隔的,那么用 cut 就有点麻烦了,因为 cut 只擅长处理“以一个字符间隔”的文本内容原文出自:http:/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号