当前位置: 首页 > news >正文

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 元字符 &#xff08;字符匹配)2.2 表示匹配次数2.4 位置锚定2.5 分组 和 或者 3.扩展正则表达式4.部分文本处理工具4.1 tr 命令4.2 cut命令4.3 sort命令4.4 uniq命令 1.通配符和正则表达式的区别 通配符一般用于文件…...

RNN模型简单理解和CNN区别

目录 神经网络&#xff1a;水平方向延伸&#xff0c;数据不具有关联性 ​ RNN&#xff1a;在神经网络的基础上加上了时间顺序&#xff0c;语义理解 ​RNN: 训练中采用梯度下降&#xff0c;反向传播 ​ 长短期记忆模型 ​输出关系&#xff1a;1 toN&#xff0c;N to N 单入…...

【Axure高保真原型】JS日期选择器筛选中继器表格

今天和大家分享JS日期选择器筛选中继器表格的原型模板&#xff0c;通过调用浏览器的日期选择器&#xff0c;所以可以获取真实的日历效果&#xff0c;具体包括哪一年二月份有29天&#xff0c;几号对应星期几&#xff0c;都是真实的&#xff0c;获取日期值后&#xff0c;通过交互…...

android bp脚本

一。android大约从7.0开始引入 .bp文件代替以前的.mk文件&#xff0c;用于帮助android项目的编译配置文件。 二。mk文件转化为bp文件&#xff0c;可以使用下面命令转化&#xff0c;注意命令中>&#xff0c;这是写入文件。androidmk是android源码自带的工具&#xff0c;他可…...

Redis 数据库 NoSQL

目录 一、NoSQL 二、为什么会出现NoSQL技术 三、NoSQL的类别 键值&#xff08;Key-Value&#xff09;存储数据库 列存储数据库 文档型数据库 图形&#xff08;Graph&#xff09;数据库 四、NoSQL适应场景 五、在分布式数据库中CAP原理 1、CAP 2、BASE 一、NoSQL NoS…...

RN 项目异常问题整理

常见问题 无法找到 CardStackStyleInterpolator StackViewStyleInterpolator 这个方法集来代替 CardStackStyleInterpolator的&#xff0c;这个方法集的路径也需要注意一下&#xff0c;在2.12.1版本之前&#xff0c; 该文件在react-navigation/src/views/StackView/中&#xf…...

STM8编程[TIM1多路PWM输出选项字节(Option Byte)操作和IO复用]

TIM1多路PWM输出选项字节(Option Byte)操作和IO复用 本文摘录于&#xff1a;https://blog.csdn.net/freeape/article/details/47008033只是做学习备份之用&#xff0c;绝无抄袭之意&#xff0c;有疑惑请联系本人&#xff01; 代码上要使用TIME1输出3路PWM,代码如下: void tim…...

Java算法_ 反转二叉树(LeetCode_Hot100)

题目描述&#xff1a;给你一棵二叉树的根节点 &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。root。 获得更多&#xff1f;算法思路:代码文档&#xff0c;算法解析的私得。 运行效果 完整代码 /*** 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);//发…...

由“美”出发 听艺术家林曦关于美育与智慧的探讨

不久前&#xff0c;林曦老师与我们的老朋友「十点读书」进行了一次线上直播&#xff0c;有关林曦老师十余年的书法教学&#xff0c;和传统美育的心得&#xff0c;以及因此诞生的新书《无用之美》。      这一次的直播&#xff0c;由“美”的主题出发&#xff0c;延伸出美育…...

Serial与Parallel GC之间的不同之处是什么?

Serial GC(串行垃圾回收器)和Parallel GC(并行垃圾回收器)都是Java虚拟机(JVM)中用于进行垃圾回收的两种基本算法。它们在性能、资源利用和回收效率等方面存在一些不同之处。下面是它们之间的详细比较&#xff1a; 1.工作方式 Serial GC&#xff1a;它是一种单线程的垃圾回收器…...

GB28181设备接入侧如何对接外部编码后音视频数据并实现预览播放

技术背景 我们在对接GB28181设备接入模块的时候&#xff0c;遇到这样的技术诉求&#xff0c;好多开发者期望能提供编码后&#xff08;H.264/H.265、AAC/PCMA&#xff09;数据对接&#xff0c;确保外部采集设备&#xff0c;比如无人机类似回调过来的数据&#xff0c;直接通过模…...

【java】为什么文件上传要转成Base64?

文章目录 1 前言2 multipart/form-data上传3 Base64上传3.1 Base64编码原理3.2 Base64编码的作用 4 总结 1 前言 最近在开发中遇到文件上传采用Base64的方式上传&#xff0c;记得以前刚开始学http上传文件的时候&#xff0c;都是通过content-type为multipart/form-data方式直接…...

SCSS 学习笔记 和 vscode下载live sass compiler插件配置

1、下载livelive sass compiler插件并配置 // 在 已有代码 下面 添加下面 代码&#xff0c;一般刚刚下载打开最后一行是&#xff1a;// "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⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专…...

机器学习笔记之优化算法(十五)Baillon Haddad Theorem简单认识

机器学习笔记之优化算法——Baillon Haddad Theorem简单认识 引言 Baillon Haddad Theorem \text{Baillon Haddad Theorem} Baillon Haddad Theorem简单认识证明过程证明&#xff1a;条件 1 ⇒ 1 \Rightarrow 1⇒ 条件 2 2 2证明&#xff1a;条件 3 ⇒ 3 \Rightarrow 3⇒条件 1…...

HighTec工程用命令行编译

当工程中含有太多模型生成的代码的时候&#xff0c;如果修改了一部分代码&#xff0c;HighTec自带的编译器编译时间会非常的慢&#xff0c;有的需要半个小时甚至一个小时&#xff0c;这是因为每次修改之后HighTec都会从头重新检索更新&#xff0c;太浪费时间了&#xff0c;于是…...

【C语言】每日一题(找到所有数组中消失的数字)

找到所有数组中消失的数字&#xff0c;链接奉上。 这里简单说一下&#xff0c;因为还没有接触到动态内存&#xff0c;数据结构&#xff0c;所以知识有限&#xff0c;也是尽力而为&#xff0c;结合题库的评论区找到了适合我的解法&#xff0c;以后有机会&#xff0c;会补上各种…...

PostgreSql 备份恢复

一、概述 数据库备份一般可分为物理备份和逻辑备份&#xff0c;其中物理备份又可分为物理冷备和物理热备&#xff0c;下面就各种备份方式进行详细说明&#xff08;一般情况下&#xff0c;生产环境采取的定时物理热备逻辑备份的方式&#xff0c;均是以下述方式为基础进一步研发编…...

鲲鹏916/920处理器性能比较

CPUKunpeng916Kunpeng920指令集Cotex-A75TaiShan-V110主频2.4GHz2.6GHz/3.0GHz核数3224/32/48/64CacheL1: 48 KB instruction cache and 32 KB data cache L2: 256 KB private per core L3: 32 MB L1: 64 KB instruction cache and 64 KB data cache L2: 512 KB private per co…...

《Go 语言第一课》课程学习笔记(八)

基本数据类型 Go 原生支持的数值类型有哪些&#xff1f; Go 语言的类型大体可分为基本数据类型、复合数据类型和接口类型这三种。 其中&#xff0c;我们日常 Go 编码中使用最多的就是基本数据类型&#xff0c;而基本数据类型中使用占比最大的又是数值类型。 整型 Go 语言的…...

管理类联考——逻辑——真题篇——按知识分类——汇总篇——一、形式逻辑——联选言

文章目录 第五节 联言+选言-摩根定理-非(A或B)=非A且非B,非(A且B)=非A或非B真题(2013-49)-联言+选言-摩根定理-非(A或B)=非A且非B,非(A且B)=非A或非B真题(2012-33)-联言+选言-摩根定理-非(A或B)=非A且非B,非(A且B)=非A或非B真题(2014-42)-联言+选言-摩根定理-非(A或B…...

CAS 一些隐藏的知识,您了解吗

目录 ConcurrentHashMap 一定是线程安全的吗 CAS 机制的注意事项 使用java 并行流 &#xff0c;您要留意了 ConcurrentHashMap 在JDK1.8中ConcurrentHashMap 内部使用的是数组加链表加红黑树的结构&#xff0c;通过CASvolatile或synchronized的方式来保证线程安全的,这些原理…...

ChatGPT逐句逐句地解释代码并分析复杂度的提示词prompt

前提安装chrome 插件 AI Prompt Genius&#xff0c; 请参考 3 个 ChatGPT 插件您需要立即下载 你是首席软件工程师。请解释这段代码&#xff1a;{{code}} 添加注释并重写代码&#xff0c;用注释解释每一行代码的作用。最后分析复杂度。快捷键 / 选择 Explain Code 输入代码提…...

【Lua语法】算术、条件、逻辑、位、三目运算符

1.算术运算符 加减乘除取余&#xff1a; - * / % Lua中独有的&#xff1a;幂运算 ^ 注意&#xff1a; 1.Lua中没有自增自减(、–)&#xff0c;也没有复合运算符(、-) 2.Lua中字符串可以进行算术运算符操作&#xff0c;会自动转成number 如&#xff1a;“10.3” 1 结果为11.3…...

Cygwin 配置C/C++编译环境以及如何编译项目

文章目录 一、安装C、C编译环境需要的包1. 选择gcc-core、gcc-g2. 选择gdb3. 选择mingw64下的gcc-core、gcc-g4. 选择make5. 选择cmake6. 确认更改7. 查看包安装状态 二、C、C 项目编译示例step1&#xff1a;解压缩sed-4.9.tar.gzstep2&#xff1a;执行./configure生成Makefile…...

回归预测 | MATLAB实现FA-BP萤火虫算法优化BP神经网络多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现FA-BP萤火虫算法优化BP神经网络多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现FA-BP萤火虫算法优化BP神经网络多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基本介绍程…...

【100天精通python】Day39:GUI界面编程_PyQt 从入门到实战(下)_图形绘制和动画效果,数据可视化,刷新交互

目录 专栏导读 6 图形绘制与动画效果 6.1 绘制基本图形、文本和图片 6.2 实现动画效果和过渡效果 7 数据可视化 7.1 使用 Matplotlib绘制图表 7.2 使用PyQtGraph绘制图表 7.3 数据的实时刷新和交互操作 7.3.1 数据的实时刷新 7.3.2 交互操作 7.4 自定义数据可视化…...

Java课题笔记~ Ajax

1.1 概述 AJAX (Asynchronous JavaScript And XML)&#xff1a;异步的 JavaScript 和 XML。 我们先来说概念中的 JavaScript 和 XML&#xff0c;JavaScript 表明该技术和前端相关&#xff1b;XML 是指以此进行数据交换。 1.1.1 作用 AJAX 作用有以下两方面&#xff1a; 与服…...