Linux之cut命令

Linux之cut命令

cut命令说明

cut命令是一个常用的linux命令,它从文件的每一行剪切字节、字符和字段并将这些剪切出来的东西写到标准输出。它有一些常用的参数,先看两个:

-b:以字节为单位进行切割

-c:以字符为单位进行切割

先看看-b和-c的区别,如下:

[root@tk-dba-mysql ~]# cat test.txt
abcdefg\abc
abcdefg\abc
hijklmn\xyz
[root@tk-dba-mysql ~]# cat test.txt|cut -b 2
b
b
i

我们定义一个文件,里面写上上述内容,并使用cut -d的方法来取它的第2列的值,可以看到,取出了我们想要的内容b,b,i。如果我们在里面再写入一行中文,我们可以看到如下结果:

[root@tk-dba-mysql ~]# cat test.txt
abcdefg\abc
abcdefg\abc
hijklmn\xyz
我是中国人
[root@tk-dba-mysql ~]# cat test.txt|cut -b 2
b
b
i

可以发现,最后一行的汉字没有出来,我们期望出现的汉字是'是'这个汉字,这是为什么呢?其实是因为我们采用的-b参数,它是使用字节作为单位进行分割的,而linux中如果采用utf8编码,那么1个汉字占用3个字节,所以我们就得不到自己期望的结果了,那怎么做呢?我们可以采用-c的方法,如下:

[root@tk-dba-mysql10-202 ~]# cat test.txt|cut -c 3
c
c
j
中
[root@tk-dba-mysql10-202 ~]# cat test.txt|cut -c 3-4,6
cdf
cdf
jkm
中国

可以看到,我们使用-c参数,就已经得到了想要的结果,上述第二个命令可以发现,最后面的列还可以使用范围值。再来看一个例子:

#第个字符到第个字符(包含第个字符)
[root@tk-dba-mysql ~]# cat test.txt|cut -c -3
abc
abc
hij
我是中

#第个字符到最后一个字符(包含第个字符)
[root@tk-dba-mysql ~]# cat test.txt|cut -c 3-
cdefg\abc
cdefg\abc
jklmn\xyz
中国人

#第个字符到第个字符以及第个字符到最后一个字符(也就是所有字符,注意第个字符不重复)
[root@tk-dba-mysql ~]# cat test.txt|cut -c -3,3-
abcdefg\abc
abcdefg\abc
hijklmn\xyz
我是中国人

#颠倒着写,cut命令会自动进行排序
[root@tk-dba-mysql ~]# cat test.txt|cut -c 3-,-3
abcdefg\abc
abcdefg\abc
hijklmn\xyz
我是中国人

#重复写,不重复执行
[root@tk-dba-mysql ~]# cat test.txt|cut -c -3,-3
abc
abc
hij
我是中

我们再来看另外两个参数:

-d:分隔符

-f:域,和-d一般连着用

废话不多说,直接看例子:

[root@tk-dba-mysql ~]# cat /etc/passwd|head -n 5
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync

[root@tk-dba-mysql ~]# cat /etc/passwd|head -n 5|cut -d : -f 1
root
bin
daemon
adm
sync

我们先打印出来/etc/passwd里面的前5行,然后通过cut -d : 来指明使用冒号作为分隔符,然后-f是选择冒号分割后的第几列,这里我们选择第一列,也就成了上面的结果。再来看例子:

[root@tk-dba-mysql10-202 ~]# cat test.txt
abcdefg\abc
abcdefg\abc
hijklmn\xyz
我是中国人

[root@tk-dba-mysql10-202 ~]# cat test.txt|cut -d e -f 1
abcd
abcd
hijklmn\xyz
我是中国人

[root@tk-dba-mysql10-202 ~]# cat test.txt|cut -d e -f 2 
fg\abc
fg\abc
hijklmn\xyz
我是中国人

我们用字母e作为分割符号,然后在-f参数后面选择第1部分还是第2部分,需要注意的是,由于后面两行"hijklmn\xyz"和"我是中国人"都不包含字母e,所以都被完整的保留了下来。

-n参数,告诉cut不要将多个字符分开来,一般和-b一起使用,如下:

[root@tk-dba-mysql10-202 ~]# cat test.txt 
我是中国人
我是中国人
我是中国人
我是中国人

[root@tk-dba-mysql10-202 ~]# cat test.txt | cut -nb 1,2,3
我
我
我
我

[root@tk-dba-mysql10-202 ~]# cat test.txt | cut -nb 4,5,6
是
是
是
是

[root@tk-dba-mysql10-202 ~]# cat test.txt | cut -nb 7,8,9    
中
中
中
中

[root@tk-dba-mysql10-202 ~]# cat test.txt | cut -nb 5,6,7,8,9
是中
是中
是中
是中

上面的例子可以看出,一个汉字是由三个字节构成的,我们想要打印对应的汉字,最好的方法是使用-nb的参数,把他对应的字节给打印出来,除此之外,还可以使用最后一种,打印出它的字节范围,这个范围中只要包含最后一个字节,那么这个汉字就能被显示出来。例如要打印出"我"这个汉字,给定的范围中就必须包含3这个字节,要打印出"是",给定的范围就必须包含6这个字节,以此类推。

本文分享自微信公众号 - DBA随笔(gh_acc2bbc0d447)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码客

CentOS7 防火墙设置

CentOS 7中防火墙是一个非常的强大的功能,在CentOS 6.5中对iptables防火墙进行了升级。

17310
来自专栏码客

Linux上安装及配置Yum

2) 下载新的CentOS-Base.repo 到/etc/yum.repos.d/

28820
来自专栏数据分析1480

Python 最强 IDE 详细使用指南!

机器之心之前也没系统地介绍过 PyCharm,怎样配置环境、怎样 DeBug、怎样同步 GitHub 等等可能都是通过经验或者摸索学会的。在本文中,我们并不会提...

9920
来自专栏小白帽学习之路

星球优秀成员作品 | 『VulnHub系列』symfonos: 3-Walkthrough

target设置为http://192.168.0.110/尝试了不同的字典,发现的结果只有index.html和/gate

12920
来自专栏软件测试testclass

一款入门级接口测试工具:Postman

Postman是比较适合开发人员和测试人员使用的一款API工具。官网传送门:Postman官网。

8320
来自专栏JAVAandPython君

人生苦短,我用PyCharm

本文假设读者熟悉 Python 开发,且计算机中已安装某个版本的 Python。该教程将使用 Python 3.6 版本,屏幕截图和 demo 均来自 macO...

12520
来自专栏雪胖纸的玩蛇日常

18.路由的嵌套

6110
来自专栏码客

Android apk解包和打包

生成的apk默认放在RetroArch_aarch64/dist目录中 RetroArch_aarch64.apk

17830
来自专栏Java帮帮-微信公众号-技术文章全总结

Linux 用户注意了:Linux Sudo 被曝漏洞

近日,安全专家发现 Sudo 中出现一个新漏洞,该漏洞是 sudo 安全策略绕过问题,可导致恶意用户或程序在目标 Linux 系统上以 root 身份执行任意命...

8820
来自专栏软件测试testclass

Jmeter基于linux搭建性能测试环境

接口测试和性能测试一般都在本地进行脚本开发,接口测试和性能测试的执行建议在服务器上进行。

10520

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励