Linux cut命令最基本的用法

之前听很多童鞋说看帮助文档都看得不是很清楚cut的用法,所以今天分享一个cut的基本的用法,在Linux 系统中,cut的用法和它的名字意思相同,它的作用就是“剪”,具体地说就是在文件中负责剪切数据用的。cut是以每一行为一个处理对象的,这种机制和sed是一样的,cut一般以什么为依据呢? 也就是说,怎么让cut知道我想剪切内容呢?其实,cut命令主要有以下三个定位方法:

第一,字节(bytes),用选项-b

第二,字符(characters),用选项-c

第三,域(fields),用选项-f

下面我们一个一个来看。

1.以字节定位

在我们执行某条命令的时候,会有一个标准的输出,这个输出可能会有很多行,而这时想在这输出中截取我们想要的每一行的指定的位置的字符,这时我们使用cut的命令就很轻松地完成这个任务。这里分两种情况,一种是单字节的截取,另外一种是连续的多个字节截取。

1.1 截取单字节

这种情况是我们可以使用-b参数,然后后面带上你想截取的第几位的字符,比如想获取ls -al输出的第一个字节我们可以输入ls -al | cut -b 1这样获取,如下图:

Linux cut命令最基本的用法

cut单字节

这样就轻易地获取到第一个字节了, 当然-b和3之间没有空格也是可以的,但为了看得清楚推荐有空格。

1.2 截取多个字节

这种情况就是上面这种情况的不同演变,只需要将后面第几位变成从第几位到第几位。同样地想获取ls -al输出的权限这部分的字符,我们可以输入ls -al | cut 1-10,如下图:

Linux cut命令最基本的用法

cut字符串

当然这种情况下可以有多种不同的形式,比如可以这样写ls -al | cut -10也是表示从第一位到第十位,如下图:

Linux cut命令最基本的用法

cut字符串

如此聪明的你肯定也会想到这种情况的另外一个形式,就是截取后面部分的字节就可以直接使用数字加上-这样的形式,如下图:

Linux cut命令最基本的用法

cut字符串

那我们能不能截取某一个字符的同时截取一个字符串,答案是肯定的,我们可以使用逗号分开就可以了,如下图:

Linux cut命令最基本的用法

cut字符,字符串

这时需要的一个点是,cut会先把-b后面所有的定位进行从小到大排序,然后再提取。如果有顺序要求的情况时可不能颠倒定位的顺序哦。同时你可能不禁想到既然能连起来,那么如果我输入的-10,10-这样的情况会是怎样呢?其实这种情况就是相当于不做截取,整行输出,如下图:

Linux cut命令最基本的用法

cut字符串

2.以字符为定位标志

以字符为定位标志就是使用参数-c,我们想看一个例子,如下图:

Linux cut命令最基本的用法

cut c

这个输出是不是觉得很熟悉呢,看着怎么和上面的-b没有什么区别呢?难道-b和-c作用一样? 其实不是,看上去输出的结果是一样,只是因为这个例子体现不出来,因为都是英文字符,所以用-b和-c没有区别,如果你提取中文,区别就看出来了,来,看看中文提取的情况,如下图:

Linux cut命令最基本的用法

cut -c

看到了吗,用-c则会以字符为单位,输出正常一个中文字;而-b只会傻傻的以字节(8位二进制位)来计算,输出就是乱码。既然你都看到上面这个关注我的广告了,就再给你点技巧。如果非要用-b来截取,或者当遇到多字节字符时,可以使用-n选项,-n用于告诉cut不要将多字节字符拆开。如下图:

Linux cut命令最基本的用法

cut -n

3.域

域的截取是什么呢?我们可以想象一下,刚才提到的-b和-c只能在固定格式的文档中提取信息,而对于非固定格式的信息则束手无策。这时候“域”就派上用场了。我们经常需要虚拟机的本机的ip,这时我们可以使用cut的域的方式来获取,如下图:

Linux cut命令最基本的用法

cut域

这个例子可能还不够清晰,我们再就一个例子,如果你观察过/etc/passwd文件,你会发现,它的输出信息不是具有固定格式,而是比较零散的排放。文件里面的冒号在每一行中都起到了非常重要的作用,冒号用来隔开每一个项。而我们想要截取每个冒号之间的字符串就可以使用上cut的域的这个功能了,具体的说就是设置“间隔符”,再设置“提取第几个域”,就OK了!这里为了看到清晰,我用这个文件的前面五行,然后截取第一个域,如下图:

Linux cut命令最基本的用法

cut 域

看到了吗,用-d来设置间隔符为冒号,然后用-f来设置我要取的是第一个域,再按回车,所有的用户名就都列出来了!当然,在设定-f时,也可以使用例如2-3或者4-类似的格式,如下图:

Linux cut命令最基本的用法

cut 域


非常好,到这里,我们就将cut的基本用法学会了,当然如果文件里面的某些域是由若干个空格来间隔的,那么用cut就有点麻烦了,因为cut只擅长处理"以一个字符间隔"的文本内容。好了,本次分享到此结束,good luck!


May you share freely, never taking more than you give.



分享到:


相關文章: