cut命令可以从一个文本文件或文本流中提取文本列。cut命令将所有命令行参数理解为要执行操作的文件的文件名,如果没有参数,就对标准输入流进行操作。
在Linux系统中,我们可以通过’man cut’或者’cut –help’ 来查看cut的相关使用手册。我在这里做出一些总结:
参数说明
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的<br />范围之内,该字符将被写出;否则,该字符将被排除。
cut命令主要是接受三个定位方法:
第一,字节(bytes),用选项-b
第二,字符(characters),用选项-c
第三,域(fields),用选项-f
字符串截取操作时候,cut以行为单位进行操作。其中在cut在进行截取字符串操作的时候,以-f选项使用最多,也是最好用的一个选项。下面就对-f选项进行详细讲解。-f选项是针对“域”信息的提取,为什么会有“域”的提取呢,因为-b和-c选项只能在固定格式的文档中提取信息,而对于非固定格式的信息则束手无策。 这时候就应该用“域”。 cut命令提供了这样的提取方式,具体的说就是设置“间隔符”,再设置“提取第几个域”,就OK了
什么是“域”呢?其实就是用分隔符分割的区域而已。
首先要使用“域”,必须选定一个分隔符来进行界定“域”的存在。这个时候需要-d选项,所以使用-f选项的时候,通常会先使用-d选项。
cut的-d选项的默认间隔符就是制表符,所以当你就是要使用制表符的时候,完全就可以省略-d选项,而直接用-f来取域就可以了。
OK,现在我们要实战一下cut的域的用法。随便找个常用的例子来说吧,就还拿获取IP地址来举例。我们通过grep来过滤IP地址,但是注意的是grep过滤的是那一行信息。所以我们需要用cut来截取字符串,当然你可以用其他的方法来截取。1
bingyu@ubuntu:~$ ifconfig lo | grep "inet" | cut -d ":" -f 2 | cut -d " " -f 1
好了,这个命令看起来有那么一点长,但是其实很好理解,并且这些我们不论是在日常的工作中,还是在写shell程序时候,这个都是可以用得到的。
下面我就来解释一下这个命令是怎么写的,并且是什么意思。
命令之间使用管道命令来表示上一条命令的输出,作为下一条命令参数。
首先我们使用ifconfig lo来输出本地的IP地址,当然你可以输出任何你计算机上的IP地址。
然后使用grep来过滤掉不必要的字符,我们只想要包含IP地址的字符串。注意的是grep只能过滤掉包含所需信息的那一行。所以其他信息我们便不能通过grep来过滤了,此时我们需要用到一些特殊命令来截取字符串,这个时候我们使用cut命令来进行字符串的截取。我们只想要IP地址,我们只盯紧目标即可。我们需要观察我们目前所得到的这一行信息,然后利用规律以及可实现的方法来进去提取有效信息。我们会发现这些信息之间都是用“:”老i作为分割的。所以我们需要用到cut命令的域。我们把分割方式设置为”:”。此时,信息就被 分割为了3处,也就是三个域了。 此时我们需要提取第二个域,也就是使用参数”-f 2”来截取。然而这还不够,此时我们输出一下信息可以看到,还包含了我们不需要的一些信息,比如“mask”。所以我们需要把这些不需要的字符也过滤掉。也就是把他们也截取到。然后我们又会发现IP地址和”mask”之间多了一个空格,所以我们可以再次把它分为2个域,只截取空格前面的字符,即是IP地址了。但是这是在我zsh终端下的演示,也许你换个其他形式的终端或者换个操作系统就不行了。为什么呢?因为在我这个终端下显示的有冒号,可以利用冒号进行分域。比如下面的这个Ubuntu的bash终端,并没有出现冒号,全部是用空格来分割的,并且出现了多空格(红线标注处)。
此时,我们自然不能使用“:”来进行分割域,也许你会想到使用空格来分割域,但是这样是不行的,这就需要我们了解到cut的缺陷与不足了。
cut的缺陷和不足 :处理多空格,如果文件里面的某些域是由若干个空格来间隔的,那么用cut就不行了,因为cut只擅长处理“以一个字符间隔”的文本内容。
当你对本篇文章的内容全部理解后,我想你在什么地方使用cut命令,什么时候使用,怎么使用,已经有了一个基础的了解。这里我要再说一句,没有万能的命令,也没有不存在缺陷的命令,我们需要做的是在适合的时候,使用恰当的命令,包括组合命令。一个命令显然不能胜任任何需求,此时我们就需要组合命令来满足需求。
本文作者:冰羽
本文地址: https://bingyublog.com/2018/12/31/提取和组合文本:cut和paste命令/
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!