shell三剑客

了解三剑客

三剑客指的是: grep、sed和awk这三个在linux系统中常用的命令行工具

shell三剑客

grep: 主要用于查找和过滤特定文本

sed:是一个流编辑器,可以对文本进行增删改查

awk:是一个文本处理工具,适合对列进行处理和分析。它不仅可以进行查找和替换,还能执行数学计算和数据统计

shell三剑客试用场景

1.日志处理与搜索:使用grep 搜索关键词,结合sed和awk进行进一步处理和分析

2.配置文件管理: 使用sed和awk进行批量修改、添加、或删除配置项。

3.数据提取和转换:利用awk提取、分析和转换结构化文本数据,处理CSV、JSON等格式

4.监控与报警:使用grep、sed和awk提取关键信息生成监控报告,监控系统状态和性能

5.日常运维任务:自动化任务如查找过期文件、清理日志、统计日志大小等。

6.系统管理:使用sed和awk处理系统状态信息,如用户信息、进程信息、磁盘使用情况等。

shell三剑客之grep指令

基本语法:grep 选项 内容 文件

记住:都是常见一些选项

支持的正则描述
-E,--extended-regexp模式是扩展正则表达式(ERE) => 字符簇、()、|或
-P,--perl-regexp模式是Perl正则表达式 => \d、\w、\s
-i,--ignore-case忽略大小写
-w,--word-regexp模式匹配整个单词
-v,--invert-match打印不匹配的行(取反)

了解:能记住最好,记不住,作为了解,使用的时候查看文档!

输出控制描述
-n,--line-number打印行号
-o,--only-matching只打印匹配的内容
-r,--recursive递归目录
-c,--count统计匹配行数

练习

准备数据集

# vim demo.txt
Hello, this is an example file.
It contains some lines of text.
Let's use grep to search for specific patterns.

在文件中搜索包含单词 "example" 的行

grep "example" demo.txt

shell三剑客之sed指令

语法格式:sed  【选项】    【sed命令】     【输入文件】 

说明:

① 注意sed软件以及后面选项,sed命令和输入文件,每个元素之间都至少有一个空格。

② 为了避免混淆,笔记中称呼sed为sed软件。sed -commands(sed命令)是sed软件内置的一些命令选项,为了和前面的options(选项)区分,故称为sed命令

③ sed -commands 既可以是单个sed命令,也可以是多个sed命令组合。

④ input -file (输入文件)是可选项,sed还能够从标准输入如管道获取输入。

sed软件有两个内置的存储空间:

☆ 模式空间(pattern space):是sed软件从文本读取一行文本然后存入的缓冲区(这个缓冲区是在内存中的),然后使用sed命令操作模式空间的内容。

☆ 保持空间(hold space):是sed软件另外一个缓冲区,用来存放临时数据,也是在内存中,但是模式空间和保持空间的用途是不一样的。sed可以交换保持空间和模式空间的数据(一般都是将保持空间的数据,拿到模式空间进行操作),但是不能在保持空间上执行普通的sed命令,也就是说我们可以在保持空间存储数据。

模式空间:临时存放数据,然后通过sed命令进行加工处理,处理完成后,打印到屏幕,然后清空模式空间

保持空间:存储数据(以后我们操作一行文本的时候,真的所有的时候都只能一行一行操作吗?答:有的时候会对多行内容进行操作,当然你对内容进行多行操作的时候,就可以把数据放在 保持空间)

sed选项说明

记住常用的三个选项:

option[选项]解释说明(带*的为重点)
-n取消默认的sed软件的输出,常与sed命令的p连用*
-r使用扩展正则表达式(grep -E),默认情况sed只识别基本正则表达式*
-i直接修改文件内容,而不是输出到终端,如果不使用-i选项sed软件只是修改在内存(模式空间)中的数据,并不会影响磁盘上的文件*

记住几个常用:

sed -commands解释说明(带*的为重点)
aappend追加,在指定行后添加一行或多行文本*
cchange,取代指定的行
ddelete,删除指定的行*
iinsert插入,在指定行前添加一行或多行文本*
pprint,打印模式空间内容,通常p会与选项-n一起使用*
q退出sed
r从指定文件读取数据
s取代,s#old#new#g==>这里g是s命令的替代标志,注意和g命令区分。*

重点记住:增删改查操作 => 增加a、删除d、修改c或s、查询p

sed添加操作

# cat >person.txt<<EOF
101,Tom,CEO
102,Rose,CTO
103,Alex,COO
104,Jack,CFO
105,Jennifer,CIO
EOF

命令说明:使用一条cat命令创建多行文本,文件包含上面的内容,后面的操作都会使用这个文件。

单行操作

sed '2a 106,Smith,CSO' person.txt
注:
2代表指定对第2行操作,其他的行忽略;
a代表追加的意思,2a即在第2行后追加文本;
2a后面加上空格,然后跟上你想要插入的多行文本即可。这里的每行文本使用"\n"连接就可以写成一行了。

注意:以上2a也可以调整为2i,代表在第2行的前面添加一行

多行操作

sed '2a 106,Eric,CSO\n107,Susan,CCO' person.txt
注:\n代表换行符

sed默认操作文件内容是在内存中的模式空间中进行实现,不会影响原文件内容。

增加操作有两种方式(行号 + i,指定行前面添加内容),(行号 + a,指定行后面添加内容)

如果希望增加操作影响原文件,可以添加一个选项-i

sed删除操作(记住d)

删除指定行文本。

注意:建议删除的时候 使用 单引号

案例1:下面用具体的例子演示一下sed删除操作实现

# sed 'd' person.txt
命令说明:如果在sed命令前面不指定地址范围,那么默认会匹配所有行,然后使用d命令删除功能就会删除这个文件的所有内容

案例2:

# sed '2d' person.txt
命令说明:这个单行删除想必大家能理解,指定删除第2行的文本

案例3:

# sed '2,5d' person.txt
命令说明:'2,5d' 指定删除第2行到第5行的内容,d代表删除操作。

案例4:

sed '/Jack/d' person.txt
命令说明:在sed软件中,使用正则的格式和awk一样,使用2个"/"包含指定的正则表达式,即"/正则表达式/"。

案例5:

# sed '/Tom/,/Alex/d' person.txt
命令说明:这是正则表达式形式的多行删除,也是以逗号分隔2个地址,最后结果是删除包含"Tom"的行到包含"Alex"的行

案例6:

# sed '3,$d' person.txt
命令说明:学过正则表达式后我们知道"$"代表行尾,但是在sed中就有一些变化了,"$"在sed中代表文件的最后一行。因此本例子的含义是删除第3行到最后一行的文本,包含第3行和最后一行,因此剩下第1,2行的内容。

案例7:在最后一行,追加 内容

# sed '$a 106,Tom,CSO' person.txt
命令说明:为了不造成同学们实验文本改来改去导致不同意,因此我用上面的命令语句只是临时修改内存数据,然后通过管道符号传给sed软件。

小结:

sed软件不仅可以添加数据行,也可以删除数据行,删除数据行必须使用(d)命令

sed删除软件 => (sed '范围d' 文件)=> 默认都是在内存中完成,需要影响原文件,则添加一个-i

sed匹配原则,匹配内容 + d,如3,5d :删除从第三行-第五行的内容

sed修改操作(重点,要记住c和s)

c:change缩写,替换指定行,以行为单位

s : s/旧的内容/替换后内容/g 或 s#旧的内容#替换后内容#g,以关键词为单位

注意:不建议使用 /,建议使用 #,因为,/ 容易 混淆,比如说,我的内容中就有 /,如果要替换了,那是不是要加,转移字符\/

为什么使用#作为标识符,因为如果文件路径的替换,/root、/etc,刚好与边界符号冲突了


sed修改操作,我们最常见的操作就是改配置文件,改参数等等 首先说一下按行替换,这个功能用的很少,所以大家了解即可。这里用到的sed命令是:"c":用新行取代旧行,记忆方法:c的全拼是change,意思是替换。

sed查询操作(记住-n+p)

sed命令:

"p":输出指定内容,但默认会输出2次匹配的结果,因此使用-n选项取消默认输出,记忆方法:p的全拼是print,意思是打印。

Shell三剑客之awk指令

awk格式

awk指令是由模式动作,或者模式和动作的组合组成。

可以理解为:我们的模式和动作选项中,可以 只有模式(意味着,你要所有的内容),也可以只有动作,也可以有 模式+动作

模式既pattern,可以类似理解成sed的模式匹配,可以由表达式组成,也可以是两个正斜杠之间的正则表达式。比如NR==1,这就是模式,可以把他理解为一个条件

动作即action,是由在大括号里面的一条或多条语句组成,语句之间使用分号隔开。

options既参数,使用最多的参数为-F(Field,用于指定字段与字段之间的分隔符,列与列之间的分隔符,默认为空格)

pattern既模式,也可以理解为条件,也叫找谁,你找谁?高矮,胖瘦,男女?都是条件,既模式。

action既动作,可以理解为干啥,找到人之后你要做什么。

注意:awk -F"分隔符" '模式和动作' file

-F后面跟是双引号,模式和动作要使用单引号进行包裹!!!

基本模式与动作

# awk -F ":" 'NR>=2 && NR<=6{print NR,$1}' /etc/passwd
2 bin
3 daemon
4 adm
5 lp
6 sync

命令说明:
-F 指定分隔符为冒号,相当于以“:”为菜刀,进行字段的切割。
NR>=2 && NR<=6:这部分表示模式,是一个条件,表示取第2行到第6行。
{print NR,$1}:这部分表示动作,表示要输出NR行号和$1第一列。
$1代表第1列
$2代表第2列
依次类推

NR == Number(数字、号码)+ Record(记录、行)== 行号

awk执行过程

解析:

① awk读入第一行内容

② 判断是否符合模式中的条件NR>=2

如果匹配则执行对应的动作{print $0}

如果不匹配条件,继续读取下一行

③ 继续读取下一行

④ 重复过程1-3,直到读取到最后一行(EOF:end of file)

awk记录(行)

名称含义
record记录,行 => NR(Number Record)行号
field域,区域,字段,列 => NF(Number Field)列号,$NF代表最后一列

awk默认情况下每一行都是一个记录(record)

① RS既record separator输入输出数据记录分隔符,每一行是怎么没的,表示每个记录输入的时候的分隔符,既行与行之间如何分隔,默认为\n,可以调整为其他字符。

② NR既number of record 记录(行)号,表示当前正在处理的记录(行)的号码。

③ ORS既output record separator 输出记录分隔符。

awk使用内置变量RS来存放输入记录(行与行)分隔符,RS表示的是输入的记录分隔符,这个值可以通过BEGIN模块重新定义修改。

NR:行号,打印行号

NF:NF代表列号,如果前面添加了$,则代表最后一列

$0:整行内容

awk字段(列)

每条记录都是由多个区域(field)组成的,默认情况下区域之间的分隔符是由空格(即空格或制表符)来分隔,并且将分隔符记录在内置变量FS中,每行记录的区域数保存在awk的内置变量NF中。

awk分隔符

如果采用默认分隔符,切割内容,如果左边有一大批空白内容,则默认分隔符会自动忽略此内容。

如果采用人为设定分隔符,切割内容,如果左边有一大批空白内容,则人为设定的分隔符会对这块内容进行切割。

awk模式与动作进阶

awk模式与动作

接下来就详细介绍下,awk的模式都有几种:

☆ 正则表达式作为模式

☆ 比较表达式作为模式 NR>=2

☆ 范围模式 NR>=2 && NR <= 5

☆ 特殊模式BEGIN和END

BEGIN模式与END模式

BEGIN模块在awk读取文件之前就执行,一般用来定义我们的内置变量(预定义变量,eg:FS,RS),可以输出表头(类似excel表格名称)

BEGIN模式之前我们有在示例中提到,自定义变量,给内容变量赋值等,都使用过。需要注意的是BEGIN模式后面要接跟一个action操作块,包含在大括号内。awk必须在输入文件进行任何处理前先执行BEGIN里的动作(action)。我们可以不要任何输入文件,就可以对BEGIN模块进行测试,因为awk需要先执行完BEGIN模式,才对输入文件做处理。BEGIN模式常常被用来修改内置变量ORS,RS,FS,OFS等值

数据集:

# cat /server/files/awkfile.txt
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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

BEGIN模块完整写法:BEGIN{}

# awk -F: 'BEGIN{print "username","UID"}{print $1,$3}' awkfile.txt
username UID  #这就是输出的表头信息
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
uucp 10

☆ END模式

作用:与BEGIN相呼应,在awk处理文件结束后,会自动触发END模块(只会触发1次)

基本语法:

awk '动作 END{print xxx}'

应用场景说明: awk执行结束,用于实现收尾操作 ① 数学计算中,输出最终结果 ② 输出最后一行等等

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

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

相关文章

创客匠人视角:知识IP变现的主流模式与创新路径

知识IP变现赛道正从“野蛮生长”走向“精细化运营”&#xff0c;如何在流量红利消退期实现可持续变现&#xff1f;创客匠人基于服务数万职业教育IP的实践经验&#xff0c;总结出一套兼顾效率与长尾价值的变现逻辑&#xff0c;为行业提供了可参考的路径。 主流变现模式&#x…

【嵌入式人工智能产品开发实战】(二十三)—— 政安晨:将小智AI代码中的display与ota部分移除

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 目录 本篇目标 第一步 ✅ 修改说明 &#x1f527; 修改后的代码节选 &#x1f4cc; 总…

从sdp开始到webrtc的通信过程

1. SDP 1.1 SDP的关键点 SDP&#xff08;Session Description Protocol&#xff09;通过分层、分类的属性字段&#xff0c;结构化描述实时通信会话的 会话基础、网络连接、媒体能力、安全策略、传输优化 等核心信息&#xff0c;每个模块承担特定功能&#xff1a; 1. 会话级别…

PHP、Apache环境中部署sqli-labs

初始化数据库的时候&#xff0c;连接不上 检查配置文件里面的数据库IP、用户名、密码是否正确 mysqli_connect函数报错 注意要下载兼容PHP7的sqli-labs版本 1、下载sqli-labs工程 从预习资料中下载。 文件名&#xff1a;sqli_labs_sqli-for7.zip 2、配置数据库 把下载好的…

Spring AI Alibaba Graph 实践

本文中将阐述下 AI 流程编排框架和 Spring AI Alibaba Graph 以及如何使用。 1. Agent 智能体 结合 Google 和 Authropic 对 Agent 的定义&#xff1a;Agent 的定义为&#xff1a;智能体&#xff08;Agent&#xff09;是能够独立运行&#xff0c;感知和理解现实世界并使用工具…

Server 11 ,⭐通过脚本在全新 Ubuntu 系统中安装 Nginx 环境,安装到指定目录( 脚本安装Nginx )

目录 前言 一、准备工作 1.1 系统要求 1.2 创建目录 1.3 创建粘贴 1.4 授权脚本 1.5 执行脚本 1.6 安装完成 二、实际部署 2.1 赋予权限 2.2 粘贴文件 2.3 重启服务 三、脚本解析 步骤 1: 安装编译依赖 步骤 2: 创建安装目录 步骤 3: 下载解压源码 步骤 4: 配置…

层压板选择、信号完整性和其他权衡

关于印刷电路材料&#xff0c;我有很多话要说&#xff0c;我觉得这非常有趣&#xff0c;而且所有候选人都带有“材料”这个词。无论出现在顶部的东西都是我最终选择的。我实际上会描述决策过程&#xff0c;因为我认为这很有趣&#xff0c;但首先要强调将我带到这里的职业旅程。…

几种经典排序算法的C++实现

以下是几种经典排序算法的C实现&#xff0c;包含冒泡排序、选择排序、插入排序、快速排序和归并排序&#xff1a; #include <iostream> #include <vector> using namespace std;// 1. 冒泡排序 void bubbleSort(vector<int>& arr) {int n arr.size();f…

[学习] 多项滤波器在信号插值和抽取中的应用:原理、实现与仿真(完整仿真代码)

多项滤波器在信号插值和抽取中的应用&#xff1a;原理、实现与仿真 文章目录 多项滤波器在信号插值和抽取中的应用&#xff1a;原理、实现与仿真引言 第一部分&#xff1a;原理详解1.1 信号插值中的原理1.2 信号抽取中的原理1.3 多项滤波器的通用原理 第二部分&#xff1a;实现…

Linux中source和bash的区别

在Linux中&#xff0c;source和bash&#xff08;或sh&#xff09;都是用于执行Shell脚本的命令&#xff0c;但它们在执行方式和作用域上有显著区别&#xff1a; 1. 执行方式 bash script.sh&#xff08;或sh script.sh&#xff09; 启动一个新的子Shell进程来执行脚本。脚本中的…

解决文明6 内存相关内容报错EXCEPTION_ACCESS_VIOLATION

我装了很多Mod&#xff0c;大约五六十个&#xff0c;经常出现内存读写异常的报错。为了这个问题&#xff0c;我非常痛苦&#xff0c;已经在全球各大论坛查询了好几周&#xff0c;终于在下方的steam评论区发现了靠谱的解答讨论区。 https://steamcommunity.com/app/289070/dis…

IIS 实现 HTTPS:OpenSSL证书生成与配置完整指南

参考 IIS7使用自签名证书搭建https站点(内网外网都可用) windows利用OpenSSL生成证书,并加入IIS 亲测有效 !!! IIS 配置自签名证书 参考:IIS7使用自签名证书搭建https站点(内网外网都可用) 亲测可行性,不成功。 IIS 配置OpenSSL 证书 √ OpenSSL 下载 https://slp…

Spark DAG、Stage 划分与 Task 调度底层原理深度剖析

Spark DAG、Stage 划分与 Task 调度底层原理深度剖析 核心知识点详解 1. DAG (Directed Acyclic Graph) 的构建过程回顾 Spark 应用程序的执行始于 RDD 的创建和一系列的转换操作 (Transformations)。这些转换操作&#xff08;如 map(), filter(), reduceByKey() 等&#xff…

关于阿里云-云消息队列MQTT的连接和使用,以及SpringBoot的集成使用

一、目的 本文主要记录物联网设备接入MQTT以及对接服务端SpringBoot整个的交互流程和使用。 二、概念 2.1什么是MQTT? MQTT是基于TCP/IP协议栈构建的异步通信消息协议&#xff0c;是一种轻量级的发布、订阅信息传输协议。可以在不可靠的网络环境中进行扩展&#xff0c;适用…

车载功能框架 --- 整车安全策略

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…

HarmonyOS5 让 React Native 应用支持 HarmonyOS 分布式能力:跨设备组件开发指南

以下是 HarmonyOS 5 与 React Native 融合实现跨设备组件的完整开发指南&#xff0c;综合关键技术与实操步骤&#xff1a; 一、分布式能力核心架构 React Native JS 层 → Native 桥接层 → HarmonyOS 分布式能力层(JavaScript) (ArkTS封装) (设备发现/数据同步/硬件…

Unity打包到微信小程序的问题

GUI Error: Invalid GUILayout state in FlowchartWindow view. Verify that all layout Begin/End calls match UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&) 第一个问题可以不用管&#xff0c;这个不影响&#xff0c;这个错误&#xff0c;但是可以正常运行&a…

Hugging face 和 魔搭

都是知名的模型平台&#xff0c;二者在定位、功能、生态等方面存在区别&#xff0c;具体如下&#xff1a; 一、定位与背景 Hugging Face&#xff1a; 定位是以自然语言处理&#xff08;NLP&#xff09;为核心发展起来的开源模型平台&#xff0c;后续逐步拓展到文本、音频、图…

React 第六十一节 Router 中 createMemoryRouter的使用详解及案例注意事项

前言 createMemoryRouter 是 React Router 提供的一种特殊路由器,它将路由状态存储在内存中而不是浏览器的 URL 地址栏中。 这种路由方式特别适用于测试、非浏览器环境(如 React Native)以及需要完全控制路由历史的场景。 一、createMemoryRouter 的主要用途 测试环境:在…

透视黄金窗口:中国有机杂粮的高质量跃迁路径

一、行业概览&#xff1a;蓝海市场背后的结构性红利 伴随全民健康意识提升和中产阶层的扩大&#xff0c;中国有机杂粮市场正迎来新一轮结构性红利期。根据《健康中国3.0时代&#xff1a;粗粮食品消费新趋势与市场增长极》数据显示&#xff0c;2020 年中国有机杂粮市场规模约 3…