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.mzph.cn/news/781482.shtml

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

相关文章

视频监控联网平台的评价指标体系

目录 一、视频应用系统评价指标体系的设计思路 &#xff08;一&#xff09;、明确评价目标和原则 &#xff08;二&#xff09;、确定评价指标 &#xff08;三&#xff09;、收集和处理数据 &#xff08;四&#xff09;、建立评价模型 &#xff08;五&#xff09;、进行综…

CT图像空气矫正

CT&#xff08;Computed Tomography&#xff09;扫描是一种常用的医学成像技术&#xff0c;用于获取人体内部的高分辨率图像。在CT图像中&#xff0c;由于X射线在穿过人体组织时会受到衰减&#xff0c;因此图像中不同区域的密度会表现出不同的灰度值。而空气与其他组织相比&…

[LeetCode][233]数字 1 的个数

题目 233. 数字 1 的个数 给定一个整数 n&#xff0c;计算所有小于等于 n 的非负整数中数字 1 出现的个数。 示例 1&#xff1a; 输入&#xff1a;n 13 输出&#xff1a;6 示例 2&#xff1a; 输入&#xff1a;n 0 输出&#xff1a;0 提示&#xff1a; 0 < n < 10^9 解…

头歌java实训作业

由于“头歌java实训作业”这个表述不是非常明确&#xff0c;我将假设你是指一套Java编程的实训作业&#xff0c;这些作业旨在帮助学习者通过实践来巩固Java编程的基础知识和技能。以下是一些可能包含在Java实训作业中的题目和案例&#xff0c;以及相应的指导说明。 ### Java实…

哔哩哔哩直播姬有线投屏教程

1 打开哔哩哔哩直播姬客户端并登录(按下图进行操作) 2 手机用usb数据线连接电脑(若跳出安装驱动的弹窗点击确定或允许),usb的连接方式为仅充电(手机差异要求为仅充电),不同品牌手机要求可能不一样,根据实际的来 3 在投屏过程中不要更改usb的连接方式(不然电脑会死机需要重启) …

vue 传递 props

如果我们正在构建一个博客&#xff0c;我们可能需要一个表示博客文章的组件。我们希望所有的博客文章分享相同的视觉布局&#xff0c;但有不同的内容。要实现这样的效果自然必须向组件中传递数据&#xff0c;例如每篇文章标题和内容&#xff0c;这就会使用到 props。 Props 是…

MySQL Explain 优化参数详细介绍

Explain 是什么? Explain命令用于分析SQL查询的执行计划&#xff0c;帮助优化查询语句和索引选择。 Explain是MySQL提供的一个非常有用的工具&#xff0c;它能够帮助数据库管理员和开发者理解SQL查询是如何被数据库执行的。通过在SELECT语句前加上EXPLAIN关键字&#xff0c;…

IDEA的Scala环境搭建

目录 前言 Scala的概述 Scala环境的搭建 一、配置Windows的JAVA环境 二、配置Windows的Scala环境 编写一个Scala程序 前言 学习Scala最好先掌握Java基础及高级部分知识&#xff0c;文章正文中会提到Scala与Java的联系&#xff0c;简单来讲Scala好比是Java的加强版&#x…

面试题:JVM的垃圾回收

一、GC概念 为了让程序员更专注于代码的实现&#xff0c;而不用过多的考虑内存释放的问题&#xff0c;所以&#xff0c;在Java语言中&#xff0c;有了自动的垃圾回收机制&#xff0c;也就是我们熟悉的GC(Garbage Collection)。 有了垃圾回收机制后&#xff0c;程序员只需要关…

ATTCK学习笔记

ATT&CK 前言知识 威胁情报&#xff1a;一般为网络流量中或者操作系统上观察到的能高度表明计算机被入侵的痕迹&#xff0c;例如某病毒的Hash值、服务器的IP地址等等。简单来说&#xff0c;威胁情报就像是当计算机被入侵时所表现出来的某种特征&#xff0c;我们将这些威胁…

文件操作(顺序读写篇)

1. 顺序读写函数一览 函数名功能适用于fgetc字符输入函数所有输入流fputc字符输出函数所有输出流fgets文本行输入函数所有输入流fputs文本行输出函数所有输出流fscanf格式化输入函数所有输入流fprintf格式化输出函数所有输出流fread二进制输入文件fwrite二进制输出文件 上面说…

【ReadPapers】A Survey of Large Language Models

LLM-Survey的llm能力和评估部分内容学习笔记——思维导图 思维导图 参考资料 A Survey of Large Language Models论文的github仓库

腾讯云优惠券领取方法大公开,省钱不再是难事

腾讯云—腾讯倾力打造的云计算品牌&#xff0c;以卓越科技能力助力各行各业数字化转型&#xff0c;为全球客户提供领先的云计算、大数据、人工智能服务&#xff0c;以及定制化行业解决方案和提供可靠上云服务&#xff0c;助力企业和开发者稳定上云&#xff01; 然而&#xff0…

粉丝免费福利第一期-海浪型手机支架

&#x1f341; 作者&#xff1a;知识浅谈&#xff0c;CSDN签约讲师&#xff0c;CSDN博客专家&#xff0c;华为云云享专家&#xff0c;阿里云专家博主 &#x1f4cc; 擅长领域&#xff1a;全栈工程师&#xff0c;大模型&#xff0c;爬虫、ACM算法 &#x1f492; 公众号&#xff…

Typescript再学习-函数(7)

// 定义函数参数和返回值的类型 function sayHi(name: string): string {return ${name} 你好; } console.log(sayHi("李明"));// 箭头函数 const sayHello (name: string) > {return hello: ${name}; }; console.log(sayHello("李明"));// 参数为可选…

Vue系列-el挂载

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>el:挂载点</title> </head> <body&g…

python中对象赋值、引用与拷贝的理解与应用

一、赋值与引用 当你将一个变量赋值给另一个变量时&#xff0c;实际上是将一个对象的引用&#xff08;内存地址&#xff09;赋给了另一个变量&#xff0c;而不是创建了一个新的对象。因此&#xff0c;这两个变量将指向相同的内存地址&#xff0c;修改其中一个变量的值将会影响…

基于单片机微波炉加热箱系统设计

**单片机设计介绍&#xff0c;基于单片机微波炉加热箱系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的微波炉加热箱系统设计是一个融合了硬件与软件技术的综合性项目。以下是对该设计概要的详细描述&#xf…

P15:PATH环境变量

为什么要配置环境变量 当我们打开DOS窗口&#xff0c;输入&#xff1a;javac&#xff0c;出现下面问题。 原因&#xff1a;windows操作系统在当前目录中无法找到javac命令文件。Windows操作系统是如何搜索硬盘上某一个命令&#xff1f; 首先从当前目录中搜索该命令如果当前目录…

OSCP靶场--Snookums

OSCP靶场–Snookums 考点(RFI信息收集数据库发现凭据bas64解码su切换用户/etc/passwd覆盖提权) 1.nmap扫描 ##┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.216.58 -sV -sC -Pn --min-rate 2500 -p- Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-30 03:39 E…