linux命令-cut

很久之前就不是很系统的学习了linux常用的处理字符的命令.虽然当时学习进展自己也很满意.但是过后又容易忘记.

现在系统的学了linux的shell命令.简单的总结一下:

cut顾名思义,用来把目标砍成一段一段的.简单看下用法.

cut [-b | -c |  -f ] "数字" -d "seprate" --complement --output-delimiter

-b以字节为单位进行分割

-c以字符为单位进行分割

-f以单词为单位进行分割.

说实话,-b-c我实在不知道该怎么区分,怎么用也看不出区别.至少规则文件,一个自己就是一个字符啊.

这三个选项后面可以跟数字,比如:

cut -f 1 filename    表示仅仅显示第一列

cut -f 1,2 filename   表示显示1和2列

cut -f 1-4 filename   表示显示1到4列

-d   指定分割符.默认是\t.这个后面用一个小例子说明一下,吃过亏,往往记得牢.

--complement   取补集.不难理解对吧.

--output-delimiter   输出分隔符.


常用的就是这些.下面结合我的一个乌龙来简单的用一下cut.

我用vim编辑了一个规则的文件.

No	Name	Mark	Percent
1	Sarath	45	90
2	Alex	49	98
3	Anu	45	90
满以为结果会完全和预期一样.结果被打脸.

技术分享

相信原因一目了然,无非就是分隔符的问题.

为什么会有这种问题呢.我明明键入的时候,用的是tab啊.

这要从vim说起.

vim有个命令叫set expandtab.可能是为程序员专门这几的,目的是将tab拓展成指定宽度个数的空格.所以看似它是tab,其实已经替换成空格了.

怎么办呢?

先说说怎么查看是否有tab分割.

1. 如果在vim下.冒号set list .就可以查看分隔符的类型了.换行是$ , tab是^I .一幕了然.我得vim因为没有tab结果就是这样的.技术分享

2. 如果不在vim环境下,也好办,用cat -T .也可以查看.结果不贴了.

怎么解决呢?方法也有很多种.

1. 同样先从vim环境下说起吧.确认没有tab以后首先:set noexpandtab . 然后:%s/ \+/\t/g

就可以了.注意千万不要把+换成*.会死的很惨.正则表达式里面,+的意思是至少有一个,而*号的意思是可以没有.

2. sed命令解决.正则是一样的.sed -i "s/ \+/\t/g"

3. tr命令解决:要稍微绕一点.tr命令回头再详细介绍.先领略一下它的魅力.   tr -s " " < filename | tr " " "\t" 

补充: tr职能从标准输入接受数据.其输出只能到标准输出.同学们如果要用这个命令,不要忘记在最后重定向一下.

-s  去除其后面接的参数的重复,只保留一个.  然后在把空格替换成\t

好滴,修改以后的文件使用cat看下:

技术分享

ok.看下各个场景的结果吧.

技术分享

补充一点: -f -c -b后面可以接的数字类型:

n,m   打印n和m

n-m   打印n到m

n-      从n开始打印直到最后

-m     从头开始打印直到m


ok,就总结这么多吧.有兴趣的同学,可以立刻就敲敲,加深一下印象.

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。