Linux cut 剪断你的千丝万缕

来自:良许Linux(微信号:liangxuxiansheng),作者:良许

今天介绍的 Linux 命令是:cut 。

从字面上来看,cut 命令与剪切有关,实际也是如此,cut 命令将一个字符串按某种特定的方式进行裁剪提取并输出。结合其它命令,cut 可以很轻松的提取其它命令输出结果中我们所需要的内容。

命令格式

cut 命令的基本格式如下:

cut 选项 文件

cut 命令同样有很多选项,但常用的有以下几个:

-b: 以字节为单位进行分割;
-c: 以字符为单位进行分割;
-d: 自定义分割符,默认是制表符;
-f: 以区域为单位进行分割,常与 -d 选项一起使用;
-n: 取消分割多字节字符,仅与 -b 选项同用;

从对 cut 命令的选项描述来看,该命令一般通过三种单位进行分割:字节、字符、域 。下面详细介绍这三种分割方式。

以字节为单位进行分割

假如现在有个 test1.txt 文件,文件内容如下:

[alvin@VM_0_16_centos cut]$ cat test1.txt
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

现在我们要对文件内容进行按行提取。

1. 提取每一行的第 1 个字节

命令如下:

[alvin@VM_0_16_centos cut]$ cut -b 1 test1.txt
M
T
W
T
F
S
S
2. 提取每一行的第 2 、4 、6 个字节

命令如下:

[alvin@VM_0_16_centos cut]$ cut -b 2,4,6 test1.txt
ody
usa
ens
hrd
rdy
aud
udy
3. 提取每一行的第 3、4、5、6 个字节

如果字节是连续的,我们就没必要一个个列出来,只需使用短横杠 - 将区间列出来即可,如下:

[alvin@VM_0_16_centos cut]$ cut -b 3-6 test1.txt
nday
esda
dnes
ursd
iday
turd
nday
4. 提取第 1、2、3 及 6 个字节

命令如下 :

[alvin@VM_0_16_centos cut]$ cut -b 1-3,6 test1.txt
Mony
Tuea
Weds
Thud
Friy
Satd
Suny
5. 提取前 3 个字节或第 3 个字节之后的内容

命令如下:

[alvin@VM_0_16_centos cut]$ cut -b -3 test1.txt
Mon
Tue
Wed
Thu
Fri
Sat
Sun
[alvin@VM_0_16_centos cut]$ cut -b 3- test1.txt
nday
esday
dnesday
ursday
iday
turday
nday

以字符为单位进行分割

字节字符的差别是啥?举个例子吧,a 这是一个字节,而  这是一个字符,明白了吧?对于汉字而言,每一个汉字都是一个字符。

假如现在有个 test2.txt 文件,它的内容如下:

[alvin@VM_0_16_centos cut]$ cat test2.txt
良许真帅
守望文章写得好
小灰仓鼠很可爱
明哥真爷们

如果以字节为单位分割,那效果是如何的呢?

[alvin@VM_0_16_centos cut]$ cut -b 2 test2.txt




很明显,一堆乱码。如果要正确分割字符,那么就需要 -nb 或 -c 选项。

[alvin@VM_0_16_centos cut]$ cut -nb 2 test2.txt




[alvin@VM_0_16_centos cut]$ cut -c 2 test2.txt




以域为单位进行分割

域是什么?我们以 /etc/passwd 文件为例说明。

[alvin@VM_0_16_centos cut]$ cat /etc/passwd | head -n 5
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

从 passwd 文件可以明显看出来,每个用户的各项信息是用冒号 : 进行隔开,所隔开的每项内容都可以称为「域」,而冒号称为「间隔符」。

现在,我们想要提取每一行的第一个域,命令如下:

[alvin@VM_0_16_centos cut]$ cat /etc/passwd | head -n 5 | cut -d : -f 1
root
bin
daemon
adm
lp

在这里,我们用 -d 选项来指定冒号 : 为间隔符,然后再用 -f 选项来指定要提取的域。当然,间隔符不仅仅是冒号,我们还可以指定其它符号,比如逗号,空格,等等。

但是,如果一个字符串里如果两个单词间有多个空格,则 cut 命令将无法分辨,所以这也是 cut 命令的缺陷。

推荐↓↓↓
Linux学习
上一篇:Linux 的启动流程 下一篇:能从远程获得乐趣的 Linux 命令