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作为分隔符的,且记在这里备忘。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络—UDP协议详解:特性、应用

​ &#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;マリンブルーの庭園—ずっと真夜中でいいのに。 0:34━━━━━━️&#x1f49f;──────── 3:34 &#x1f504; ◀…

Rust 02.控制、引用、切片Slice、智能指针

1.控制流 //rust通过所有权机制来管理内存&#xff0c;编译器在编译就会根据所有权规则对内存的使用进行 //堆和栈 //编译的时候数据的类型大小是固定的&#xff0c;就是分配在栈上的 //编译的时候数据类型大小不固定&#xff0c;就是分配堆上的 fn main() {let x: i32 1;{le…

美术馆设计方案优化布局与设施提升观众体验!

如今&#xff0c;美术馆不仅仅是作为展示艺术作品的平台&#xff0c;也是吸引公众参与和创造独特体验的数字艺术体验空间&#xff0c;因此许多传统美术馆在进行翻修改造时&#xff0c;都会更加注重用户体验&#xff0c;并在其中使用大量的多媒体互动&#xff0c;让参观者能够在…

基于 YOLO V8 Fine-Tuning 训练自定义的目标检测模型

一、YOLO V8 YOLO V8 是由 2023 年 ultralytics 公司开源的发布&#xff0c;是结合了前几代 YOLO 的融合改进版。YOLO V8 支持全方位的视觉 AI 任务&#xff0c;包括检测、分割、姿态估计、跟踪和分类。并且在速度和准确性方面具有无与伦比的性能。能够应用在各种对速度和精度…

【重制版】在Android手机上安装kali Linux

前言 由于kali官方的Nethunter2的安装代码因为…无法访问&#xff0c;手头又没有一些受支持的机器3&#xff0c;所以做了这个脚本&#xff0c;供大家使用。 工具 搭载基于Android的手机TermuxVNC Viewer 安装必备软件(如已安装请忽略) 请到 https://www.hestudio.net/post…

制造出海,灵途科技助力割草机器人、泳池清洁机器人全方位感知

近年来&#xff0c;越来越多的中国企业开始对外开拓&#xff0c;走向海外市场、挖掘和满足全球消费者的需求。在消费机器人领域&#xff0c;中国企业出海成绩亮眼&#xff01;在2024 ces 和上海AWE展会上&#xff0c;多家机器人公司展示了家用智能割草机器人、泳池清洁机器人的…

C#基础知识总结

C语言、C和C#的区别 ✔ 面向对象编程&#xff08;OOP&#xff09;&#xff1a; C 是一种过程化的编程语言&#xff0c;它不直接支持面向对象编程。然而&#xff0c;C 是一种支持 OOP 的 C 的超集&#xff0c;它引入了类、对象、继承、多态等概念。C# 是完全面向对象的&#xff…

【C++】string类(常用接口)

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;http://t.csdnimg.cn/eCa5z 目录 修改操作 push_back append operator assign insert erase replace c_str find string类非成…

淘宝商品详情数据(商品分析,竞品分析,代购商城建站与跨境电商,ERP系统商品数据选品)

淘宝商品详情数据在多个业务场景中发挥着关键作用&#xff0c;以下是一些主要的应用场景&#xff1a; 请求示例&#xff0c;API接口接入Anzexi58 商品分析&#xff1a;通过对淘宝商品详情的全面分析&#xff0c;商家可以深入了解商品的属性、价格、销售量、评价等信息。这些数…

手写简易操作系统(十八)--实现用户进程

一、TSS TSS是Task State Segment的缩写&#xff0c;即任务状态段&#xff0c;早在简述特权级的时候我们就讲过了一点 手写简易操作系统(八)&#xff0c;现在我们讲一下这些保存的寄存器是干嘛的。 这一部分需要讲点历史&#xff0c;硬件与软件的关系是相互促进的&#xff0c…

基于SpringBoot + Vue实现的中国陕西民俗网设计与实现+毕业论文

介绍 本系统包含管理员、用户两个角色。 管理员角色&#xff1a;登录、用户管理功能、民俗介绍管理功能(发布和管理民俗文化的介绍文章)、公告信息管理功能(发布网站的重要通知和活动信息)、商品管理功能(对商家发布的商品进行监管)、商品评价管理功能(监管商品评价内容&#…

乐理通识

2023 年搞了台雅马哈 61 键的电子琴&#xff0c;顺手看了下啊 B 的上的课程 《零基础自学音乐学乐理合集-第一季》&#xff0c;这里是部分笔记&#xff08;给博客加点不一样的东西&#x1f440;&#xff09;。 简谱各部分一览 C 表示音名竖线为小节线 音名 完整钢琴键盘 88 键…

leetcode:392. 判断子序列

题目&#xff1a; class Solution { public:bool isSubsequence(string s, string t) {} }; 题解&#xff1a; 很巧妙的题解&#xff1a;循环遍历两个字符串&#xff0c;两个字符串都没遍完就继续遍历&#xff0c;字符串s先遍历完结果为true&#xff0c;字符串t先遍历完结果为…

项目管理【环境】概述

系列文章目录 【引论一】项目管理的意义 【引论二】项目管理的逻辑 【环境】概述 一、组织运行环境 1.1 事业环境因素EEFs 1.2 组织过程资产OPA 1.3 二者差异 二、组织结构类型 2.1 组织架构 2.2 职能型组织 2.3 项目型组织 2.4 矩阵型组织 2.5 项目管理者在不同组织中的特…

NSSCTF Round#20 Basic 真亦假,假亦真 CSDN_To_PDF V1.2 出题笔记 (附wp+源码)

真亦假&#xff0c;假亦真 简介&#xff1a;java伪造php一句话马。实则信息泄露一扫就出&#xff0c;flag在/flag里面。 题目描述&#xff1a;开开心心签个到吧&#xff0c;祝各位师傅们好运~ 静态flag&#xff1a;NSS{Checkin_h4v3_4_g00D_tINNe!} /路由显示 <?php e…

数据库安全(redis、couchdb、h2database)CVE复现

redis服务默认端口&#xff1a;6379&#xff1b;我们可以通过端口扫描来判断是否存在该服务。 Redis 是一套开源的使用ANSI C 编写、支持网络、可基于内存亦可持久化的日志型、键值存储数据库&#xff0c;并提供多种语言的API。 Redis 如果在没有开启认证的情况下&#xff0c;…

论文笔记:TALK LIKE A GRAPH: ENCODING GRAPHS FORLARGE LANGUAGE MODELS

ICLR 2024&#xff0c;reviewer评分 6666 1 intro 1.1 背景 当下LLM的限制 限制1&#xff1a;对非结构化文本的依赖 ——>模型有时会错过明显的逻辑推理或产生错误的结论限制2&#xff1a;LLMs本质上受到它们训练时间的限制&#xff0c;将“最新”信息纳入到不断变化的世…

MySQL优化之外连接消除----空值拒绝

什么叫空值拒绝呢&#xff1f;请看下面用例 可以看到&#xff0c;外连接中&#xff0c;从表的表连接列&#xff0c;tb2.id出现了null&#xff0c;因为tb2中并没有id5的情况 点击(此处)折叠或打开 select * from tb1 left join tb2 on tb1.idtb2.id where tb2.id>1; sel…

商品说明书的制作工具来啦,用这几个就够了!

商品说明书是用户了解产品特性、性能、使用方法的重要途径。一个明确、易懂的商品说明书&#xff0c;可以显著提升用户体验&#xff0c;进而提升产品的销量。但我们都知道&#xff0c;制作一份高质量的说明书并不容易&#xff0c;需要仔细设计、计划和撰写。幸运的是&#xff0…

解决 linux 服务器 java 命令不生效问题

在Linux系统中&#xff0c;当你安装Java并设置了JAVA_HOME环境变量后&#xff0c;你可能需要使用source /etc/profile命令来使Java命令生效。这是因为/etc/profile是一个系统级的配置文件&#xff0c;它包含了系统的全局环境变量设置。 但是需要注意的是&#xff0c;source /e…