Linux常用命令(六)

cut 命令

cut是一个选取命令,就是将一段数据经过分析,取出我们想要的。
cut命令是一个将文本按列进行切分的小工具,它可以指定分隔每列的定界符。
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。

如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。
如果一行数据包含多个字段,现在想要提取其中的一列或多列,这时候cut命令就可以大显身手了,有的类似于SQL语句中的select,哈哈!

命令格式:

cut [选项] [文件名]

常用选项:

**-b(bytes):** 以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志
**-c(characters):** 以字符为单位进行分割
**-d(delimiters):** 自定义分隔符,默认为制表符
**-f(fields):** 与-d一起使用,指定显示哪些字段(区域)
**-n:** 取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的<br />范围之内,该字符将被写出;否则,该字符将被排除


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

以字节定位:

cut命令如果使用了-b选项,那么执行此命令时,cut会先把-b后面所有的定位进行从小到大排序,然后再提取。可不能颠倒定位的顺序哦~

cat stu.txt | cut -b 3-5,8  提取第3,第4、第5和第8个字节,怎么办?
cat stu.txt | cut -b 8,3-5  提取第3,第4、第5和第8个字节,结果还是一样

cat stu.txt | cut -b -3        提取第一个字节到第三个字节
cat stu.txt | cut -b 3-        提取从第三个字节到结尾

想必你也看到了,-3表示从第一个字节到第三个字节,而3-表示从第三个字节到行尾。如果你细心,你可以看到这两种情况下,都包括了第三个字节“c”

如果我执行who|cut -b -3,3-,你觉得会如何呢?答案是输出整行,不会出现连续两个重叠的c的
cat stu.txt | cut -b -3,3-

以字符定位:

-b和-c的区别:如果你提取中文,区别就看出来了

域是怎么回事呢?解释解释:)

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

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

以/etc/passwd的前五行内容为例,提取文件中的相应字段

cut有哪些缺陷和不足

如果文件里面的某些域是由若干个空格来间隔的,那么用cut就有点麻烦了,因为cut只擅长处理“以一个字符间隔”的文本内容


常用范例

给任意一字符串 str,取出其最后一个字符,可以使用如下命令:

补充知识~~

trailing newline

很多软件或命令都会自动加上一个trailing newline,也就是c语言里的\n,ascii码为10

举例说明:

echo abcde > test1
echo -n abcde > test2
vim test3,并写入abcde
vim test4,并写入abcde,回车

然后查看这些文件的大小:

文件大小为5,表示只有abcde这5个字符。
文件大小为6的,表示文件内容为abcde\n。
文件大小为7的,表示文件内容为abcde\n\n。

在vim和gedit创建文件时,自动加上了一个trailing newline,并且它始终是不可见的


除了vim和gedit,与有关的还有两个shell命令。一个是echo,一个是 wc -l

echo在默认情况下是会自动加上\n的,这也是为什么每次使用这个命令的时候最后都会有换行(终端里的\n都是可见的)。如果加上选项-n,则不会自动加上这个\n。
wc -l是一个统计的命令。以前,一直以为它是统计行数的,被欺骗了这么久~~


因此:
echo abcde | wc -l 结果为1
echo -n abcde | wc -l 结果为0

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. cut 命令
,