Linux shell编程学习笔记43:cut命令

0 前言

Linux shell编程学习笔记42:md5sum

中,md5sum命令计算md5校验值后返回信息的格式是:

md5校验值  文件名

包括两项内容,前一项是md5校验值 ,后一项是文件名。

如果我们只想要前面的md5 校验值,可以使用cut命令来实现。

1 cut命令的功能和格式

我们可以使用命令 cut --help命令 查看它的用法:

purpleEndurer @ bash ~ $ cut --help
Usage: cut OPTION... [FILE]...
Print selected parts of lines from each FILE to standard output.

Mandatory arguments to long options are mandatory for short options too.
  -b, --bytes=LIST        select only these bytes
  -c, --characters=LIST   select only these characters
  -d, --delimiter=DELIM   use DELIM instead of TAB for field delimiter
  -f, --fields=LIST       select only these fields;  also print any line
                            that contains no delimiter character, unless
                            the -s option is specified
  -n                      with -b: don't split multibyte characters
      --complement        complement the set of selected bytes, characters
                            or fields
  -s, --only-delimited    do not print lines not containing delimiters
      --output-delimiter=STRING  use STRING as the output delimiter
                            the default is to use the input delimiter
      --help     display this help and exit
      --version  output version information and exit

Use one, and only one of -b, -c or -f.  Each LIST is made up of one
range, or many ranges separated by commas.  Selected input is written
in the same order that it is read, and is written exactly once.
Each range is one of:

  N     N'th byte, character or field, counted from 1
  N-    from N'th byte, character or field, to end of line
  N-M   from N'th to M'th (included) byte, character or field
  -M    from first to M'th (included) byte, character or field

With no FILE, or when FILE is -, read standard input.

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Report cut translation bugs to <http://translationproject.org/team/>
For complete documentation, run: info coreutils 'cut invocation'
purpleEndurer @ bash ~ $ 

1.1 cut命令的功能

cut命令的功能是将文本行中的选定部分打印到标准输出。

1.2 cut命令的格式

cut 选项… [文件] ...

1.2.1 选项及功能

选项描述备注
-b, --bytes=LIST仅选择这些字节
-c, --characters=LIST仅选择这些字符
-d, --delimiter=DELIM使用 DELIM 而不是 TAB 作为字段分隔符必须与-b、-c或-f选项一起使用
-f, --fields=LIST

只显示选择的字段

除非指定了 -s 选项,否则打印的内容不包含分隔符

-n  -b

取消分割多字节字符。仅和 -b 标志一起使用。

如果字符的最后一个字节落在由 -b 标志的 List 参数指示的范围之内,该字符将被输出;否则,该字符将被排除

--complement

显示选定的字节、字符集或字段的补集

即:显示非选定的字节、字符集或字段

必须与-b、-c或-f选项一起使用
-s, --only-delimited

不打印不包含分隔符的行

即:只打印包含分隔符的行

--output-delimiter=STRING

使用 STRING 作为输出分隔符

默认设置是使用输入分隔符

--help显示此帮助并退出
--version输出版本信息并退出

 1.2.2 选择的表示方法

1.2.2.1 选择方法1

指定字节、字符或字段号,号之间以半角逗号分隔,例如:

1,3,5:选择第1、第3、第5个字节、字符或字段号

1.2.2.2 选择方法2

指定字节、字符、字段的起始号和结束号,两个之间用半角剪号分隔,列如:

超始号N-结束号M:从第N个字节、字符、字段到第M个(包括第M个)

如果不指定开始号,则默认从行首(第1个)开始,如:

-结束号N:从行首到第N个字节、字符、字段结束(包括第N个)

如果不指定结束号,则默认到行末,如:

起始号N-:从第N个字节、字符、字段开始(包括第N个),直到行末

以上两种表示方法可以混用 ,其间以半角逗号分隔。

2 cut命令使用实例

2.0 创建演示文件

我们先创建一个演示用的文件a.txt,内容如下:

no name music sport
1 aa 100 100
1 bb  99  99

创建文件和查看文件内容的命令序列如下:

purpleEnduer @ bash ~ $ echo "no name music sport" > a.txt
purpleEnduer @ bash ~ $ echo "1 aa 100 100" >> a.txt
purpleEnduer @ bash ~ $ echo "1 bb  99  99" >> a.txt
purpleEnduer @ bash ~ $ cat a.txt
no name music sport
1 aa 100 100
1 bb  99  99

 

2.1 cut -b:按字节选择

2.1.1  cut -b 1 a.txt:显示文件各行的第1个字节

purpleEnduer @ bash ~ $ cut -b 1 a.txt
n
1
1

 

2.1.2 cut -b 1,2,5  a.txt:显示文件各行的第1、第2和第5个字节

purpleEnduer @ bash ~ $ cut -b 1,2,5  a.txt
noa
1  
1  

 

2.1.3 cut -b 1-5  a.txt:显示文件各行的第1-5个字节内容

purpleEnduer @ bash ~ $ cut -b 1-5  a.txt
no na
1 aa 
1 bb 

 

2.1.4 cut -b 1-5  a.txt:显示文件各行的第1-5个字节和第8-10个字节的内容

 purpleEnduer @ bash ~ $ cut -b 1-5,8-10 a.txt
no na mu
1 aa 0 1
1 bb 9  

2.1.5 cut -b 1-5  a.txt:显示文件各行的第1个字节,第5个字节和第1-5个字节及第8-10个字节的内容

purpleEnduer @ bash ~ $ cut -b 1,5,1-5,8-10 a.txt
no na mu
1 aa 0 1
1 bb 9  

 2.2 cut -c: 按字符选择

2.2.1 cut -c 1 a.txt:显示文件各行的第1个字符

purpleEnduer @ bash ~ $ cut -c 1 a.txt
n
1
1

2.2.2 cut -c 1,8 a.txt:显示文件各行的第1个和第8个字符

purpleEnduer @ bash ~ $ cut -c 1,8 a.txt

10
19

2.2.3 cut -c 1-5 a.txt:显示文件各行的第1个-第5个字符

purpleEnduer @ bash ~ $ cut -c 1-5 a.txt
no na
1 aa 
1 bb 

2.2.4 cut -c 1-5,7,9 a.txt:显示文件各行的第1个-第5个字符,第7个字符和第9个字符

purpleEnduer @ bash ~ $ cut -c 1-5,7,9 a.txt
no naem
1 aa 0 
1 bb 9 

2.2 cut -f -d:按字段选择

2.2.0 cut -f 1 a.txt:显示文件各行的第1个字段

purpleEnduer @ bash ~ $ cut -f 1 a.txt
no name music sport
1 aa 100 100
1 bb  99  99

结果文件内容全部显示出来了,这是因为系统默认字段是以\t来分隔的,而我们创建a.txt时是以空格来分隔的。

2.2.1 cut -f 1  -d ' ' a.txt:显示文件各行的第1个字段

这时我们如果仍然要选择字段,我们就要同时使用-d选项。

purpleEnduer @ bash \w $ cut -f1 -d ' ' a.txt
no
1
1

 

2.2.2 cut -f 3-  -d ' ' a.txt:从第3个字段开始显示文件各行

purpleEnduer @ bash \w $ cut -f 3- -d ' ' a.txt
music sport
100 100
 99  99

下面我们重新创建文件a.txt,并以\t来分隔各字段,命令序列如下:

purpleEnduer @ bash ~ $ echo -e "no\tname\tmusic\tsport" > a.txt
purpleEnduer @ bash ~ $ echo -e "1\taa\t100\t100" >> a.txt
purpleEnduer @ bash ~ $ echo -e "1\tbb\t99\t99" >> a.txt
purpleEnduer @ bash ~ $ cat a.txt
no      name    music   sport
1       aa      100     100
1       bb      99      99

为了让echo命令将\t识别为转义字符,我们使用了-e选项。

请注意-e选项的位置,它是直接跟在echo 命令后面的。

这样我们可以使用命令: cut -f 2-4  a.txt 来选择第2个-4个字段显示而不必用-d选项了:

purpleEnduer @ bash ~ $ cut -f 2-4  a.txt
name    music   sport
aa      100     100
bb      99      99

 

2.3 cut --complement:显示非选定的内容

为了展示--complement的功能,我们可以对比以下几组命令的返回信息,来理解--complement的功能:

对于以空格做为字段分隔符的文件:

purpleEnduer @ bash \w $ cut -f 3 -d ' '  a.txt            
music
100

purpleEnduer @ bash \w $ cut -f 3 -d ' ' --complement a.txt
no name sport
1 aa 100
1 bb 99  99
purpleEnduer @ bash \w $ 

对于以\t做为字段分隔符的文件: 

purpleEnduer @ bash \w $ cut -f 3  a.txt                         
music
100
99
purpleEnduer @ bash \w $ cut -f 3  --complement  a.txt           
no      name    sport
1       aa      100
1       bb      99
purpleEnduer @ bash \w $ 

再来一组:

purpleEnduer @ bash ~ $ cut -f 2-3 a.txt
name    music
aa      100
bb      99
purpleEnduer @ bash ~ $ cut -f 2-3 --complement a.txt
no      sport
1       100
1       99
purpleEnduer @ bash ~ $ 

 

2.4  cut -s:只打印包含分隔符的行

我们通过分析下列命令的执行情况来理解这个选项的功能。

purpleEnduer @ bash ~ $ cut -s  a.txt
cut: you must specify a list of bytes, characters, or fields
Try 'cut --help' for more information.

-s 选项必须和-b、-c或-f选项联合使用。

purpleEnduer @ bash ~ $ cut -f 3 -s  a.txt
music
100
99

由于a.txt中的字段是以\t分隔的,所以可以正常显示第3个字段的内容。

purpleEnduer @ bash ~ $ cut -f 3 -s  -d ' ' a.txt

由于a.txt中的字段是以\t分隔的,所以当我们指定分隔符为空格时,没有一行符合这个要求,所以命令执行结果为空,因为没有可以显示的内容。

purpleEnduer @ bash ~ $ cut -f 3 -s  -d a a.txt

        100     100
purpleEnduer @ bash ~ $ 

我们指定字符a为分隔符,这个执行结果有点难理解。

 我们先看文件a.txt的内容:

no name music sport
1   aa      100    100
1    bb      99      99

第1行内容只包含一个字符a,以字符a作为分隔符的话,这行只有2个字段:

第1个字段:no\tn

第2个字段: me\tmusic\tsport

而命令选项-f 3 要求显示第3列,所以第1行尽管包含有分隔符a,但没有第3个字段,所以这行显示为空。

第2行内容包含了两个字符a,以字符a作为分隔符的话,这行包括3个字符:

第1 个字段:1\t

第2个字段:空(位于aa之间)

第3个字段:\t100\t100

所以第2行显示了第3个字段。

第3行内容不包括分融符a,所以这一行不显示。

2.5 cut --output-delimiter=STRING :使用指定字符串作为输出分隔符

purpleEnduer @ bash ~ $ echo -e "no\tname\tmusic\tsport" > a.txt
purpleEnduer @ bash ~ $ echo -e "1\taa\t100\t100" >> a.txt
purpleEnduer @ bash ~ $ echo -e "1\tbb\t99\t99" >> a.txt
purpleEnduer @ bash ~ $ cat a.txt
no      name    music   sport
1       aa      100     100
1       bb      99      99
purpleEnduer @ bash ~ $ cut --output-delimiter=* a.txt
cut: you must specify a list of bytes, characters, or fields
Try 'cut --help' for more information.
purpleEnduer @ bash ~ $ cut -f --output-delimiter=* a.txt
cut: invalid byte, character or field list
Try 'cut --help' for more information.
purpleEnduer @ bash ~ $ cut -f 1- --output-delimiter=* a.txt
no*name*music*sport
1*aa*100*100
1*bb*99*99
purpleEnduer @ bash ~ $ 

这个选项必须和-b、-c或-f配合使用,所以命令

cut --output-delimiter=* a.txt

cut -f --output-delimiter=* a.txt

都出错了。

命令 cut -f 1- --output-delimiter=* a.txt 指定分隔符为*,所以显示的结果就是:

no*name*music*sport
1*aa*100*100
1*bb*99*99

原先的\t被替换为*了。

3.后记

在学习本节内容时,为了方便,示例文件a.txt的内容是以空格作为分隔符的,由于linux默认分隔符是\t,为了说明命令的功能,又增加了是以\t作为分隔符的示例文件,仍然以a.txt为文件名,如果不仔细看,容易引起混乱,以后有机会对这个笔记进行修订时,就改为使用两个示例文件,其中示例文件a.txt的内容是以空格作为分隔符的,示例文件b.txt的内容是以\t作为分隔符的,且记在这里备忘。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/291957.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang生成UUID

安装依赖 go get -u github.com/google/uuid文档 谷歌UUID文档 示例 函数签名func NewV7() ( UUID ,错误) func (receiver *basicUtils) GenerateUUID() uuid.UUID {return uuid.Must(uuid.NewV7()) } uid : GenerateUUID()

ssm009毕业生就业信息统计系统+vue

毕业生就业信息统计系统 摘 要 随着移动应用技术的发展&#xff0c;越来越多的学生借助于移动手机、电脑完成生活中的事务&#xff0c;许多的行业也更加重视与互联网的结合&#xff0c;以提高快捷、高效、安全&#xff0c;可以帮助更多有需求的人。针对传统毕业生就业信息统计…

echarts 图表/SVG 图片指定位置截取

echarts 图表/SVG 图片指定位置截取 1.前期准备2.图片截取3.关于drawImage参数 需求&#xff1a;如下图所示&#xff0c;需要固定头部legend信息 1.前期准备 echarts dom渲染容器 <div :id"barchart id" class"charts" ref"barchart">&…

08-研发流程设计(上):如何设计Go项目的开发流程?

在Go 项目开发中&#xff0c;我们不仅要完成产品功能的开发&#xff0c;还要确保整个过程是高效的&#xff0c;代码是高质量的。 所以&#xff0c;Go 项目开发一定要设计一个合理的研发流程&#xff0c;来提高开发效率、减少软件维护成本。研发流程会因为项目、团队和开发模式…

微信开发者工具接入短剧播放器插件

接入短剧播放插线 申请添加插件基础接入app.jsonapp.jsplayerManager.js数据加密跳转到播放器页面运行出错示例小程序页面页面使用的方法小程序输入框绑定申请添加插件 添加插件:登录微信开发者平台 ——> 设置 ——> 第三方设置 ——> 插件管理 ——> 搜索“短剧…

基于SpringBoot + Vue实现的校园失物招领系统设计与实现+毕业论文

介绍 系统包含用户和管理员两个角色 用户&#xff1a;登录、注册、留言板、公告信息、失物招领、失物认领、寻物启事、个人中心、我发布的失物信息、我的失物认领、我发布的寻物启事、寻物启事留言等功能。 管理员&#xff1a;登录、基础数据管理、系统管理、留言板管理、失物信…

Docker数据卷挂载

一、容器与数据耦合的问题: 数据卷是虚拟的&#xff0c;不真实存在的&#xff0c;它指向文件中的文件夹 &#xff0c;属主机文件系统通过数据卷和容器数据进行联系&#xff0c;你改变我也改变。 解决办法&#xff1a; 对宿主机文件系统内的文件进行修改&#xff0c;会立刻反应…

Spring官方真的不建议使用属性进行依赖注入吗?

使用Spring进行依赖注入时&#xff0c;很多大佬都推荐使用构造方法注入&#xff0c;而非使用在属性上添加 Autowired 注入&#xff0c;而且还说这是Spring官方说的&#xff0c;真的是这样吗&#xff1f; 使用Spring进行依赖主要的方式有很多&#xff0c;主流的使用方式有两种&a…

微服务高级篇(五):可靠消息服务

文章目录 一、消息队列MQ存在的问题&#xff1f;二、如何保证 消息可靠性 &#xff1f;2.1 生产者消息确认【对生产者配置】2.2 消息持久化2.3 消费者消息确认【对消费者配置】2.4 消费失败重试机制2.5 消费者失败消息处理策略2.6 总结 三、处理延迟消息&#xff1f;死信交换机…

系统需求分析报告(原件获取)

第1章 序言 第2章 引言 2.1 项目概述 2.2 编写目的 2.3 文档约定 2.4 预期读者及阅读建议 第3章 技术要求 3.1 软件开发要求 第4章 项目建设内容 第5章 系统安全需求 5.1 物理设计安全 5.2 系统安全设计 5.3 网络安全设计 5.4 应用安全设计 5.5 对用户安全管理 …

一文带你深刻了解控制台console那些事

一、前言 首先感谢小伙伴们访问我的博客&#xff0c;但是你是有多么的无聊才会选择打开我的控制台呢&#xff1f;不过还是很感谢大家通过邮件的形式&#xff0c;给我提出很多的宝贵意见。 借此机会正好和大家唠一唠前端console到底有什么魔法。 二、console.log调试必备 consol…

Android ImageView 的scaleType 属性图解

目录 前言测试素材测试布局xmlscaleType前言 一、ScaleType.FIT_CENTER 默认二、ScaleType.FIT_START三、ScaleType.FIT_END四、ScaleType.FIT_XY五、ScaleType.CENTER六、ScaleType.CENTER_CROP七、ScaleType.CENTER_INSIDE八、ScaleType.MATRIX 前言 原文链接&#xff1a; A…

阿里云服务器4核8G配置最新活动价格

阿里云服务器4核8g配置云服务器u1价格是955.58元一年&#xff0c;4核8G配置还可以选择ECS计算型c7实例、计算型c8i实例、计算平衡增强型c6e、ECS经济型e实例、AMD计算型c8a等机型等ECS实例规格&#xff0c;规格不同性能不同&#xff0c;价格也不同&#xff0c;阿里云服务器网al…

交换机干道链路

干道链路是用于交换机之间或交换机与路由器之间互连的物理链路。干道链路传输的数据帧都必须打上Tag&#xff0c;便于设备识别数据帧所属的VLAN。因此一条干道链路可以承载多个VLAN的数据帧&#xff0c;如图1-1所示。 图1-1 干道链路功能示意图 干道链路可以透传VLAN。换言之&…

鸿蒙应用开发与鸿蒙系统开发哪个更有前景?

随后迎来了不少互联网公司与华为鸿蒙原生应用达成了合作&#xff0c;像我们常见的阿里、京东、小红书、得物……等公司&#xff0c;还有一些银行也都与华为鸿蒙达成了合作。使得一时之间市场紧缺鸿蒙开发人才&#xff0c;不少公司不惜重金争抢人才。 据智联招聘的最新数据显示…

推特Twitter有直播功能吗?如何用Twitter直播?

现在各大直播平台已经成为社交媒体营销的一种重要渠道&#xff0c;它让品牌能够即时地与全球受众进行互动。据统计&#xff0c;直播市场正在迅速增长&#xff0c;预计到2028年将达到2230亿美元的规模。在这个不断扩张的市场中&#xff0c;许多社交媒体平台如YouTube、Facebook、…

[深度学习]yolov8+pyqt5搭建精美界面GUI设计源码实现二

【简单介绍】 基于目标检测算法YOLOv8和灵活的PyQt5界面开发框架&#xff0c;我们精心打造了一款集直观性、易用性和功能性于一体的目标检测GUI界面。通过深度整合YOLOv8在目标识别上的卓越能力与PyQt5的精致界面设计&#xff0c;我们成功研发出一款既高效又稳定的软件GUI。 …

【论文精读】CAM:基于上下文增强和特征细化网络的微小目标检测

文章目录 &#x1f680;&#x1f680;&#x1f680;摘要一、1️⃣ Introduction---介绍二、2️⃣Related Work---相关工作2.1 &#x1f393; 基于深度学习的对象检测器2.2 ✨多尺度特征融合2.3 ⭐️数据增强 三、3️⃣提议的方法3.1 &#x1f393; 具有上下文增强和特征细化的特…

Qt与编码

ASCII码:一个字节&#xff0c;256个字符。 Unicode:字母&#xff0c;汉字都占用两个字节。 utf-8:字母一个字节&#xff0c;汉字3个字节。 gbk:字母一个字节&#xff0c;汉字2个字节。 gb2312:可以表示汉字&#xff0c;gb2312<gbk。 编码查看&#xff1a; https://www.…

烫烫烫手的结构体大小计算来咯,很烫哦,慢慢消化。自定义类型(一)

emmm&#xff0c;在这炎热的夏天在宿舍吹着空调写着博客也是一件不错的事呢&#xff0c;今天就来来好好盘一下C语言中的自定义类型。 常常会回顾努力的自己&#xff0c;所以要给自己的努力留下足迹。 为今天努力的自己打个卡&#xff0c;留个痕迹吧 2024.03.29 小闭 目录 …