文本编辑命令和正则表达式
一、 编辑文本的命令
正则表达式匹配的是文本内容,Linux的文本三剑客,都是针对文本内容。
文本三剑客
grep:过滤文本内容
sed:针对文本内容进行增删改查 (本文不相关)
awk:按行取列 (本文不相关)
文本三剑客都是按行进行匹配。
1.1 grep命令
grep的作用就是使用正则表达式来匹配文本内容。
选项:
-m:匹配几次之后停止,一行有多个匹配的内容也仅视为一次匹配-v:取反,所有不包含匹配内容的行-n:显示匹配内容所在的行号-c:仅统计匹配的行数-o:仅显示匹配的内容-q:静默模式,不输出结果到终端。
-A:after,跟数字,显示匹配到的内容所在行以及之后的几行-B:before,跟数字,显示匹配到的内容所在行以及之前的几行-C:跟数字,显示匹配到的内容所在行之前以及之后的几行
-
-e:相当于逻辑或 -
-E:匹配扩展正则表达式 -
-f:匹配两个文件,过滤出相同的内容,以第一个文件为准 -
-r:递归目录,目录下的文件内容,不处理软连接 -
-R:递归目录,目录下的文件内容,包括软连接 -
1.2 sort命令:排序
sort:以行为单位,对文件内容进行排序,默认按照数字从小到大,再字母从a到z的顺序排列,数字在前,字母在后。排序时对每行的内容从第一个字符开始依次排序。格式:常用2种方式
-

-f:忽略大小写,相同字母默认大写排在前面
-b:忽略每行之前的空格
-n:按照数字大小进行排序,此时不是按照单个字符进行比较,而是行首所有连续的数字都能被识别,按照识别到的数字的大小进行排序。且此时字母排序优先级高于数字
-r:反向排序
-u:去重,相同内容仅显示一次
-o:把排序后的结果转存到指定文件
-k:指定字段(字符)进行排序
-t:指定字段的分隔符
-
1.3 uniq命令:去重
-
uniq:去除连续重复的行,只显示一行选项:
-
-c:统计连续重复的行的次数,且合并连续重复的行 -
-u:显示仅出现一次的行,包括不是连续出现的重复行 -
-d:仅显示连续重复的行,不包括非连续出现的的重复行
1.4 tr命令:替换和删除
tr :用来对标准输出的字符进行替换,压缩和删除。
格式:
![]()
选项
-c:tr -c 字符集1 字符集2 ,保留字符集1的字符,其他的字符用字符集2来进行替换,字符集要用单引号''括起来-d:tr -d 字符集 ,删除字符集的字符-s:把字符集1的部分替换成字符集2的部分,也可以把连续重复出现的字符压缩成一个字符

sed比tr功能更强,常用于正则表达式。
1.5 cut命令:快速裁剪
cut可以对字段进行截取和裁剪
选项:
-d :指定字段的分隔符,指定的分隔符用' '包裹,不指定-d默认分隔符为横向制表符(tab键)
-f:对字段进行截取,指定输出的字段,和-d连用,如1-3,输出1到3字段,2,4,输出2和4字段
-c :以字符为单位进行截取,不常用
-b :以字节为单位进行截取,不常用
--complement:排除指定的字段后再输出
--output-delimiter:更改输出内容的分隔符,指定改变的分隔符用=连接

1.6 split命令:文件拆分
split :大文件拆分成若干小文件
选项:
-l :按行来进行分割
-b :按照大小来进行分割(单位K M G …)

1.7 文件合并
cat命令paste命令
cat合并和paste合并的区别?
cat是上下合并;paste是左右合并
1.8 练习
问:查看当前网络状态中有多少个ESTABLISHED和LISTEN。
![]()
其中 ^State 表示以State开头,-v是取反
二、正则表达式
正则表达式是由一类特殊字符以及文本字符所编写的一个模式,模式又来匹配文件当中的内容(字符)。校验我们输入的内容是否满足规定、格式、长度等等要求。
主要用来匹配文本的内容、命令的结果。
区别于通配符:通配符只能用于匹配文件名和目录名,不能匹配文件的内容和命令结果。
2.1 基本正则表达式
2.1.1 元字符(字符匹配)
. :匹配任意单个字符
\ :转义符:恢复字符的本意
[] :匹配指定的范围内的任意单个字符或者数字,区分大小写,也可以用1-5,a-t这样的方式范围匹配
^ :匹配以^之后内容开头的字符
^# :匹配以#开头的行
^$ :匹配空行
[ ] :中括号里输入空格,就可以匹配空格
注:匹配内容两边需要加引号,单引号双引号都可以
\w :匹配单词或汉字
\s :匹配任意的空白符
\d :匹配数字
\b :匹配单词的开始或结束
注:连续的数字、字母、下划线都算作单词的内部,如abc_123算作一个单词
反义字符:
\W :匹配任意不是字母,数字,下划线,汉字的字符,如+ - =
\S :匹配任意不是空白符的字符
\D :匹配任意非数字的字符
\B :匹配不是单词开头或结束的位置
[^] :取反,表示匹配除了^之后的内容
2.1.2 次数匹配
表示次数,匹配字符出现的次数:
* :匹配*前面的字符0次或者多次
匹配前一个元素零次或多次:
a*: 匹配零个或多个连续的字符 ‘a’。
123*: 匹配 ‘12’ 后面跟零个或多个 ‘3’ 的连续序列,如 ‘12’, ‘123’, ‘1233’, ‘12333’ 等。
贪婪匹配:
.*: 匹配任意字符(除换行符外)零次或多次。这通常用于匹配任意长度的文本。
a.*b: 匹配以 ‘a’ 开头,以 ‘b’ 结尾的字符串,中间可以是任意字符。
注意事项:
* 是贪婪的,它会尽可能多地匹配字符。如果需要非贪婪匹配(尽可能少地匹配),可以使用 *?。
与其他元字符结合使用:
.*: 匹配任意长度的字符序列。
[a-z]*: 匹配任意小写字母序列,长度可以为零。
\d*: 匹配任意数字序列。
\? :匹配前面的字符0次或者1次。如'ab\?c'可以匹配到abc和ac
\+ :匹配前面的字符至少出现一次
\{n\} :匹配前面的字符n次,且前面的字符必须是连续出现n次才能匹配
\{m,n\} :匹配前面的字符至少m次,至多n次,超出的不显示
\{,n\} :匹配前面的字符至多n次
\{m,\}:匹配前面的字符至少m次
2.1.3 位置锚定
对行匹配:
^ :行首锚定,以什么为开头,如^3 ^[a-z]
$ :行尾锚定,以什么为结尾,如t$ [3-9]$
特别的:对于^text&形式,是整行匹配,即匹配到的行的内容只能是text,字符和字符数量完全匹配。
^$:匹配空行,可以理解为行首和行尾之间为空,即空行
对词匹配:
\<或者\b :词首锚定,匹配单词的左侧,连续的数字、字母、下划线都算作单词的内部,写在匹配内容的左边
\>或者\b :词尾锚定,匹配单词的右侧,写在匹配内容的右边
\btext\b或者\<text\>表示整词匹配,只能匹配到内容为text的文本,字符和字符数量完全匹配。
2.1.4 分组和逻辑关系
\(\) :表示分组,把括号内的内容视为一个整体
\| :表示逻辑或
2.2 扩展正则表达式
扩展正则表达式和基本正则表达式的规则完全一致,唯一的区别就是扩展正则表达式大部分时候不需要转义符\。除了\b \< \>锚定词首词尾的时候不能去掉转义符\,表示()而不是分组时也要加\。
grep -E支持扩展正则表达式。
egrep和grep -E一个效果。
2.3 练习
- 使用正则表达式把下列邮箱全部匹配出来


- 匹配下列电话

显示/etc/passwd中以sh结尾的行;
![]()
查找/etc/inittab中含有“以s开头,并以d结尾的单词”模式的行

查找ifconfig命令结果中的1-255之间的整数;
![]()
在/etc/passwd中取出默认shell为bash的行;
![]()
高亮显示passwd文件中冒号,及其两侧的字符
![]()
相关文章:
文本编辑命令和正则表达式
一、 编辑文本的命令 正则表达式匹配的是文本内容,Linux的文本三剑客,都是针对文本内容。 文本三剑客 grep:过滤文本内容 sed:针对文本内容进行增删改查 (本文不相关) awk:按行取列 &#x…...
云手机群控功能讲解
接触云手机之前,很多企业或者个人卖家都对群控有浓厚的兴趣,云手机群控具体是什么呢?云手机群控,顾名思义,是指能够同时对多台云手机进行集中控制和管理的功能。打破了传统单台手机操作的限制,实现了规模化…...
gdb用法
创建文件 // main.cpp文件 // 稳态误差 void pid_test_wentaiwucha() {float p 1.5;int t 1; // t 1s;int target 5; // 5m/sfloat output 0;float radis 3; // 稳态误差std::cout << "output: " << std::endl;fo…...
聊一聊UDF/UDTF/UDAF是什么,开发要点及如何使用?
背景介绍 UDF来源于Hive,Hive可以允许用户编写自己定义的函数UDF,然后在查询中进行使用。星环Inceptor中的UDF开发规范与Hive相同,目前有3种UDF: A. UDF--以单个数据行为参数,输出单个数据行; UDF&#…...
配置Nginx二级域名
一、环境 (一)配置 1.服务器 linux CentOS 2.反向代理 Nginx 3.开放端口 云服务器开放端口80和443 二、域名备案 (一)腾讯云 1.腾讯云域名备案流程 备注:一级域名备案后,二级域名可以不用再备案&a…...
LeetCode——判断回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如,121 是回文,而 …...
shell:使用结构化语句(for、while循环)
1. for命令 下面是bash shell中for命令的基本格式。 for var in list docommands done每次for命令遍历值列表,它都会将列表中的下个值赋给$test变量。$test变量可以像for 命令语句中的其他脚本变量一样使用。在最后一次迭代后,$test变量的值会在shell脚…...
数据结构_绪论
1.数据结构的研究内容 研究数据的特性和数据之间的关系 用计算机解决一个问题的步骤 1.具体问题抽象成数学模型 实质: 分析问题--->提取操作对象--->找出操作对象之间的关系(数据结构)--->用数学语言描述 操作对象对象之间的关系 2.设计算法 3.编程,调试,运行 …...
AI自动生成角色和情节连续的漫画,中山大学联想提出AutoStudio,可以多轮交互式连续生成并保持主题一致性。
中山大学和联想研究院提出AutoStudio: 是一种无需训练的多代理框架,用于多轮交互式图像生成,能够在生成多样化图像的同时保持主体一致性。 AutoStudio 采用三个基于 LLM 的智能体来解释人类意图并为 SD 模型生成适当的布局指导。此外,还引入…...
【经典面试题】RabbitMQ如何防止重复消费?
RabbitMQ的消息消费是有确认机制的,正常情况下,消费者在消费消息成功后,会发送一个确认消息,消息队列接收到之后,就会将该消息从消息队列中删除,下次也就不会再投递了。 但是如果存在网络延迟的问题&#…...
如何自己录制教学视频?零基础也能上手
随着在线教育的蓬勃发展,录制教学视频成为了教师和教育工作者们不可或缺的一项技能。无论是为了远程教学、课程分享还是知识普及,教学视频的录制都变得愈发重要。可是如何自己录制教学视频呢?本文将介绍两种录制教学视频的方法,这…...
【android】用 ExpandableListView 来实现 TreeView树形菜单视图
使用 ExpandableListView 来实现 TreeView 创建一个 ExpandableListAdapter 来为其提供数据。以下演示了如何使用 ExpandableListView 来展示树形结构的数据: 首先,在布局文件中添加 ExpandableListView: <ExpandableListViewandroid:i…...
策略模式与函数式编程应用
策略模式 | 单一职责原则(Single Responsibility Principle, SRP):islenone和islentwo分别根据特定条件返回电话号码 函数式编程: ‘’ if pd.isna(self.note1) else len(re.findall(r’\d, self.note1)) 重复代码: 当…...
docker原理记录C-N-A
docker原理 容器技术的兴起源于 PaaS 技术的普及 Docker 项目通过“容器镜像”,解决了应用打包这个根本性难题容器本身没有价值,有价值的是“容器编排”Cgroups 和 Namespace Cgroups 技术是用来制造约束的主要手段,而Namespace 技术则是用…...
【LeetCode】每日一题:二叉树的层次遍历
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 解题思路 水题 AC代码 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightN…...
单体架构改造为微服务架构之痛点解析
1.微服务职责划分之痛 1.1 痛点描述 微服务的难点在于无法对一些特定职责进行清晰划分,比如某个特定职责应该归属于服务A还是服务B? 1.2 为服务划分原则的痛点 1.2.1 根据存放主要数据的服务所在进行划分 比如一个能根据商品ID找出商品信息的接口,把…...
马面裙的故事:汉服如何通过直播电商实现产业跃迁
【潮汐商业评论/原创】 波澜壮阔的千里江山在马面裙的百褶上展开,织金花纹在女性的步伐之间若隐若现,从明清到现代,如今马面裙又流行了回来,成为女性的流行单品,2024年春节期间,马面裙更是成为华夏女孩们的…...
SaaS产品运营:维护四个不同类型的合作伙伴的实战指南
在SaaS(软件即服务)行业的竞争中,与合作伙伴建立并维护良好关系至关重要。不同类型的合作伙伴对于产品的推广、市场覆盖和用户增长都起着不同的作用。如何有效维护这四种类型合作伙伴?看个案例一起学习吧。 一、合作伙伴的四种类型…...
【监控】3.配置 Grafana 以使用 Prometheus 数据源
1 访问 Grafana 打开浏览器,访问 http://localhost:3000(默认端口)。使用默认的用户名和密码 admin/admin 登录。 2 添加 Prometheus 数据源 进入 Grafana 仪表板,点击左侧菜单中的“Configuration” -> “Data Sources”。…...
【LinuxC语言】网络编程中粘包问题
文章目录 前言什么叫做粘包问题粘包问题如何解决?总结前言 在进行网络编程时,我们经常会遇到一个非常常见但又往往被忽视的问题,那就是"粘包"问题。粘包是指在基于TCP/IP协议的数据传输过程中,由于TCP/IP协议是基于字节流的,这就可能会导致多个数据包被一起接收…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
ZYNQ学习记录FPGA(一)ZYNQ简介
一、知识准备 1.一些术语,缩写和概念: 1)ZYNQ全称:ZYNQ7000 All Pgrammable SoC 2)SoC:system on chips(片上系统),对比集成电路的SoB(system on board) 3)ARM:处理器…...
