Shell编程之正则表达式(非常详细)
正则表达式
- 1.通配符和正则表达式的区别
- 2.基本正则表达式
- 2.1 元字符 (字符匹配)
- 2.2 表示匹配次数
- 2.4 位置锚定
- 2.5 分组 和 或者
- 3.扩展正则表达式
- 4.部分文本处理工具
- 4.1 tr 命令
- 4.2 cut命令
- 4.3 sort命令
- 4.4 uniq命令
1.通配符和正则表达式的区别
通配符一般用于文件名匹配。
正则表达式一般用于匹配文件内容。
2.基本正则表达式
2.1 元字符 (字符匹配)
| 匹配符1 | 功能 |
|---|---|
| . | 匹配任意单个字符,可以是一个汉字 |
| [ … ] | 匹配指定范围内的任意单个字符 |
| [ ^… ] | 匹配指定范围外的任意单个字符 |
| ^ [ … ] | 匹配以…开头的 |
#补充说明#
. #表示匹配任意字符[. ] #方括号中的. 就是本身的含义 /. #和[. ]相同
| 匹配符2 | 功能 |
|---|---|
| [:alnum:] | 字母和数字 |
| [:alpha:] | 代表任何英文大小写字符,亦即 A-Z, a-z |
| [:upper:] | 大写字母,相当于[A-Z] |
| [:lower:] | 小写字母,相当于[a-z] |
| [:blank:] | 空白字符(空格和制表符) |
| [:space:] | 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白 |
| [:cntrl:] | 不可打印的控制字符(退格、删除、警铃…) |
| [:digit:] | 十进制数字 |
| [:xdigit:] | 十六进制数字 |
| [:print:] | 可打印字符 |
| [:graph:] | 可打印的非空白字符 |
| [:punct:] | 标点符号 |
#补充说明#
[:space:] 比[:blank:]包含的范围广
| 匹配符3 | 功能 |
|---|---|
| \w | 匹配单词构成部分 |
| \W | 匹配非单词构成部分 |
| \s | 匹配任何非空白字符 |
| \S | 匹配任何空白字符,包括空格、制表符、换页符等等 |
#补充说明#
\w 等价于[_[:alnum:]]
\W 等价于[^_[:alnum:]]
\S 等价于 [^ \f\n\r\t\v]
\s 等价于 [ \f\n\r\t\v]
2.2 表示匹配次数
| 匹配符 | 功能 |
|---|---|
| * | 匹配前面的字符任意次,包括0次 |
| .* | 任意长度的任意字符,不包括0次 |
| ? | 匹配其前面的字符出现0次或1次 |
| + | 匹配其前面的字符出现最少1次 |
| {n} | 匹配前面的字符n次 |
| {m,n} | 匹配前面的字符至少m次,至多n次 |
| {,n} | 匹配前面的字符至多n次,<=n |
| {n,} | 匹配前面的字符至少n次 |
示例:怎么提取IP地址?
ifconfig ens33|grep netmask \
|grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+'|head -n1# \+ 表示匹配前面的字符最少一次
# \. 表示转译 因为.表示匹配任意字符

2.4 位置锚定
| 匹配符 | 功能 |
|---|---|
| ^ | 行首锚定 |
| $ | 行尾锚定 |
| ^$ | 空行 |
| ^ [[:space:]]*$ | 空白行 |
| \ < 或 \b | 词首锚定 |
| \ > 或 \b | 词尾锚定 |
| \bPATTERN\b | 匹配整个单词 |
示例1:统计/etc/fstab 文件中有多少真实单词?
cat /etc/fstab | grep -o '\b[a-zA-Z]\+\b'|wc -l
#不要有空格

示例2: 统计/etc/fstab文件中不是已#号开头的非空行的行数
cat /etc/fstab | grep "^[^#[:space:]]" | wc -l
# ^ 以...开头
#[非# 和 非空行]#或者
grep -vE "^\s*#|^$"

2.5 分组 和 或者
#分组#
( x y)
将多个字符捆绑在一起,当作一个整体处理,如:\(root\)+
#或者#x \| y x或者y
示例:组合运用
echo 1abc 2abc 3abc |grep -o "1\|2abc"
#只匹配了1或者2abc
1
2abc
echo 1abc 2abc 3abc |grep -o "\(1\|2\)abc"
#1abc或者2abc
1abc
2abc


3.扩展正则表达式
#基本格式#
grep -E-E表示使用扩展正则表达式
| 匹配符 | 功能 |
|---|---|
| * | 匹配前面子表达式0次或者多次 |
| .* | 任意长度的任意字符 |
| ? | 匹配前面子表达式0次或者1次,即:可有可无 |
| + | 与星号相似,表示其前面字符出现一次或多次,但必须出现一次,>=1 |
| {n,m} | 匹配前面的子表达式n到m次 |
| {m} | 匹配前面的子表达式m次 |
| {n,} | 匹配前面的子表达式不少于n次, >=n |
| {,n} | 匹配前面的子表达式最多n次,<=n |
| I | 用逻辑或方式指定正则表达式要是用的模式 |
| () | 字符串分组,将括号中的字符串作为一个整体 |
示例1:提取当前主机的IP地址
ifconfig ens33 | grep netmask| grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}'|head -n 1
#-E表示使用扩展正则表达式 192.168.2.100 #执行结果

4.部分文本处理工具
4.1 tr 命令
tr命令用于字符转换或字符删除。
#基本格式#
tr [选项] 字符集1 字符集2
#字符集1 是要被替换或删除的字符集
#字符集2 是要替换为的字符集
#常用选项#-c 除了指定的字符之外的所有字符都会被替换
-d 表示删除指定的字符
-s 表示压缩重复的字符为单个字符
示例1: 将文本中的大写字母转换为小写字母
echo "Hello World" | tr '[:upper:]' '[:lower:]'
hello world

示例2:删除文本中的数字
echo "123abc456" | tr -d '[:digit:]'
abc

示例3:将文本中的空格合并为单个空格
echo "Hello World" | tr -s ' '
Hello World

示例4: 删除文本中的特殊字符
echo "Hello @#World" | tr -d '@#'
Hello World

4.2 cut命令
cut命令可以提取文本数据中指定的列。
cut命令可以根据指定的字符位置或指定的字段分隔符来截取文本,并将结果输出到标准输出或指定的文件。
#基本格式#
cut [选项] 文件
-d 指定字段的分隔符,默认为制表符。
-f 指定要提取的字段列表,字段列表之间使用逗号分隔,例如`-f 1,3,5`
-c 指定要提取的字符位置列表,字符位置列表之间使用逗号分隔,例如`-c 1-5,10-15`
--complement 提取指定字段或字符位置之外的内容
#提取文件的第一列cut -f1 file.txt#提取文件的第二、四、五列,并使用逗号作为分隔符cut -f2,4,5 -d',' file.txt#提取文件的前五个字符:cut -c1-5 file.txt# 提取文件的第一列以外的所有列:cut -f 2 --complement file.txt
4.3 sort命令
sort命令用于对文本文件进行排序,默认以字母排序。
#基本格式#
sort [选项] file
#常用选项#
-b 忽略行首空白字符
-r 以倒序方式进行排序
-f 忽略大小写进行排序
-n 按照数值大小进行排序
-u 去除重复行
-t 指定字段分隔符
-k 指定按照字段排序
4.4 uniq命令
uniq 命令用于找出或删除文本文件中连续出现的重复行。
#基本格式#
uniq [选项] [输入文件 [输出文件]]#如果不指定输入文件,则会从标准输入获取数据
#如果不指定输出文件,则结果会打印到标准输出
#常用选项#-c 在输出结果中显示每行重复出现的次数。
-d 只显示重复行。
-u 只显示不重复的行。
相关文章:
Shell编程之正则表达式(非常详细)
正则表达式 1.通配符和正则表达式的区别2.基本正则表达式2.1 元字符 (字符匹配)2.2 表示匹配次数2.4 位置锚定2.5 分组 和 或者 3.扩展正则表达式4.部分文本处理工具4.1 tr 命令4.2 cut命令4.3 sort命令4.4 uniq命令 1.通配符和正则表达式的区别 通配符一般用于文件…...
RNN模型简单理解和CNN区别
目录 神经网络:水平方向延伸,数据不具有关联性 RNN:在神经网络的基础上加上了时间顺序,语义理解 RNN: 训练中采用梯度下降,反向传播 长短期记忆模型 输出关系:1 toN,N to N 单入…...
【Axure高保真原型】JS日期选择器筛选中继器表格
今天和大家分享JS日期选择器筛选中继器表格的原型模板,通过调用浏览器的日期选择器,所以可以获取真实的日历效果,具体包括哪一年二月份有29天,几号对应星期几,都是真实的,获取日期值后,通过交互…...
android bp脚本
一。android大约从7.0开始引入 .bp文件代替以前的.mk文件,用于帮助android项目的编译配置文件。 二。mk文件转化为bp文件,可以使用下面命令转化,注意命令中>,这是写入文件。androidmk是android源码自带的工具,他可…...
Redis 数据库 NoSQL
目录 一、NoSQL 二、为什么会出现NoSQL技术 三、NoSQL的类别 键值(Key-Value)存储数据库 列存储数据库 文档型数据库 图形(Graph)数据库 四、NoSQL适应场景 五、在分布式数据库中CAP原理 1、CAP 2、BASE 一、NoSQL NoS…...
RN 项目异常问题整理
常见问题 无法找到 CardStackStyleInterpolator StackViewStyleInterpolator 这个方法集来代替 CardStackStyleInterpolator的,这个方法集的路径也需要注意一下,在2.12.1版本之前, 该文件在react-navigation/src/views/StackView/中…...
STM8编程[TIM1多路PWM输出选项字节(Option Byte)操作和IO复用]
TIM1多路PWM输出选项字节(Option Byte)操作和IO复用 本文摘录于:https://blog.csdn.net/freeape/article/details/47008033只是做学习备份之用,绝无抄袭之意,有疑惑请联系本人! 代码上要使用TIME1输出3路PWM,代码如下: void tim…...
Java算法_ 反转二叉树(LeetCode_Hot100)
题目描述:给你一棵二叉树的根节点 ,翻转这棵二叉树,并返回其根节点。root。 获得更多?算法思路:代码文档,算法解析的私得。 运行效果 完整代码 /*** 2 * Author: LJJ* 3 * Date: 2023/8/16 13:18* 4*/public class In…...
C/C++ 标准模版库STL(持续更新版)
标准模版库STL 目录 算法库 栈 队列 向量 映射 列表 双向链表 集合 Iterator 送代器 <algorithm> 算法库 max, min 用于找出一组值中的最大值和最小值 swap 用于交换两个变量的值 sort 用于对一个范围内的元素进行排序 lower_bound, upper_bound 用于在已排序的容器…...
ARM(实验二)
uart4.h #ifndef __H__ #define __H__#include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_uart.h"//RCC/GPIO/UART4章节初始化 void hal_uart4_init();//发送一个字符函数 void hal_put_char(const char str);//发…...
由“美”出发 听艺术家林曦关于美育与智慧的探讨
不久前,林曦老师与我们的老朋友「十点读书」进行了一次线上直播,有关林曦老师十余年的书法教学,和传统美育的心得,以及因此诞生的新书《无用之美》。 这一次的直播,由“美”的主题出发,延伸出美育…...
Serial与Parallel GC之间的不同之处是什么?
Serial GC(串行垃圾回收器)和Parallel GC(并行垃圾回收器)都是Java虚拟机(JVM)中用于进行垃圾回收的两种基本算法。它们在性能、资源利用和回收效率等方面存在一些不同之处。下面是它们之间的详细比较: 1.工作方式 Serial GC:它是一种单线程的垃圾回收器…...
GB28181设备接入侧如何对接外部编码后音视频数据并实现预览播放
技术背景 我们在对接GB28181设备接入模块的时候,遇到这样的技术诉求,好多开发者期望能提供编码后(H.264/H.265、AAC/PCMA)数据对接,确保外部采集设备,比如无人机类似回调过来的数据,直接通过模…...
【java】为什么文件上传要转成Base64?
文章目录 1 前言2 multipart/form-data上传3 Base64上传3.1 Base64编码原理3.2 Base64编码的作用 4 总结 1 前言 最近在开发中遇到文件上传采用Base64的方式上传,记得以前刚开始学http上传文件的时候,都是通过content-type为multipart/form-data方式直接…...
SCSS 学习笔记 和 vscode下载live sass compiler插件配置
1、下载livelive sass compiler插件并配置 // 在 已有代码 下面 添加下面 代码,一般刚刚下载打开最后一行是:// "liveSassCompile.settings.autoprefix": [],// 所以直接 把下面复制进去保存就行"liveSassCompile.settings.autoprefix&qu…...
CSS中的字体属性有哪些值,并分别描述它们的作用。
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ font-style⭐ font-weight⭐ font-size⭐ font-family⭐ font-variant⭐ line-height⭐ letter-spacing⭐ word-spacing⭐ font⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专…...
机器学习笔记之优化算法(十五)Baillon Haddad Theorem简单认识
机器学习笔记之优化算法——Baillon Haddad Theorem简单认识 引言 Baillon Haddad Theorem \text{Baillon Haddad Theorem} Baillon Haddad Theorem简单认识证明过程证明:条件 1 ⇒ 1 \Rightarrow 1⇒ 条件 2 2 2证明:条件 3 ⇒ 3 \Rightarrow 3⇒条件 1…...
HighTec工程用命令行编译
当工程中含有太多模型生成的代码的时候,如果修改了一部分代码,HighTec自带的编译器编译时间会非常的慢,有的需要半个小时甚至一个小时,这是因为每次修改之后HighTec都会从头重新检索更新,太浪费时间了,于是…...
【C语言】每日一题(找到所有数组中消失的数字)
找到所有数组中消失的数字,链接奉上。 这里简单说一下,因为还没有接触到动态内存,数据结构,所以知识有限,也是尽力而为,结合题库的评论区找到了适合我的解法,以后有机会,会补上各种…...
PostgreSql 备份恢复
一、概述 数据库备份一般可分为物理备份和逻辑备份,其中物理备份又可分为物理冷备和物理热备,下面就各种备份方式进行详细说明(一般情况下,生产环境采取的定时物理热备逻辑备份的方式,均是以下述方式为基础进一步研发编…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
