shell正则入门

shell从入门到精通(22)shell正则匹配~= 如果匹配成功,BASH_REMATCH[0] 将会存储整个匹配的结果,而 BASH_REMATCH[1]、BASH_REMATCH[2] 和 BASH_REMATCH[3] 分别存储了正则表达式中括号捕获的三个子模式的匹配结果。BASH_REMATCH 数组的第一个元素 (即 BASH_REMATCH[0]) 存储着整个正则表达式匹配的部分,而后续的元素依次存储了正则表达式中使用括号捕获的子模式的匹配结果。捕获匹配结果: 通过使用括号创建子模式,可以捕获匹配到的子字符串,以便后续在脚本中使用。 阅读详情

1.系统通配符

*        #所有
.        #当前目录
..       #当前目录的上一级目录
-        #当前目录的上一次所在的目录
~        #家目录
#        #注释,超级管理员的命令行提示符
$        #引用变量,普通用户的命令行提示符
?        #匹配任意一个字符,必须是一个
!       #非,取反
[]       #匹配中括号中任意一个字符
{}       #生成序列,整体
[^]      #排除中括号中所有字符
``       #优先执行反引号里面的命令
$()      #优先执行里面的命令
&&       #前面一个命令执行成功,才会执行后面的命令
||       #前面的命令执行失败,才会执行后面的命令
|        #管道,将前面的命令的输出结果交给管道后面的命令
\        #转义字符,取消一些特殊字符的含义
&        #将程序放到后台运行

2.正则元字符

^        #开头
$        #结尾
^$       #空行
\        #转义字符
.        #任意字符,除了换行符
[]       #匹配中括号中的任意一个字符
[^]      #匹配[^]之外的所有字符
[a-z]    #匹配所有小写字母
[0-9]    #匹配所有数字
[A-Z]    #匹配所有大写字母
?       #匹配前面的字符出现0次或者1次        #扩展
*        #匹配前面的字符出现0次或者0次以上
+        #匹配前面的字符出现1次或者1次以上        #扩展
.*       #所有
()       #整体,后向引用,创建一个用于匹配的字符串   #扩展
{n}      #n数字, 前面的字符出现n次
{n,}     #前面的字符至少出现n次
{n,m}    #前面的字符出现至少n次,最多m次   n<m
{,m}     #前面的字符最多出现m次
|        #或者                    #扩展正则
\w       #匹配字母,数字,下划线,汉字
\s       #匹配任意空白字符
\d       #匹配数字
\b       #匹配单词的开始或结束
\n       #换行符
\W       #匹配任意不是字母,数字,下划线,汉字的字符
\S       #匹配任意不是空白符的字符
\D       #匹配任意非数字字符
\B       #匹配不是单词开头或者结束的位置
-----特定匹配------
[[:upper:]]      #所有大写字母
[[:lower:]]      #所有小写字母
[[:alpha:]]      #所有字母
[[:space:]]      #所有空白字符
[[:digit:]]      #所有数字
[[:alnum:]]      #所有字母和数字
[[:punct:]]      #所有特殊符号

3.正则基础扩展

 零宽断言

(?=ip)       #匹配ip字符串前面的内容
(?<=ip)      #匹配ip字符串后面的内容
(?!ip)       #反向判断断言,如果不匹配ip字符串则取前面的内容,匹配则不取
(?<!)        #反向判断断言,如果不匹配ip字符串则取后面的内容,匹配则不取

捕获

(ip)     #匹配字符串为ip的值,捕获文本到自动命名的组中
(?<name>ip)   #匹配字符串为ip的值,捕获文本到名称为name的组中
(?:ip)    #匹配字符串为ip的值,不捕获文本,也不分配到组中

4.正则的使用

以下使用grep过滤命令来对正则规则来实战,我这边随便用一个文件,此前先来了解一下grep的参数功能

 -i        #忽略大小写
 -v        #排除
 -n        #显示过滤出来的内容所在文件的行号
 -c        #将过滤出来的内容进行统计
 -w        #精确匹配
 -o        #只显示过滤出来的内容
 -E        #支持扩展正则,正则的扩展参数需要加上-E,以上正则参数有备注哪些是扩展参数,如果实在不清楚,使用正则规则都加-E也不会有问题
 -r        #递归过滤
 -R        #递归过滤
 -A        #显示过滤出来内容在原文本中的下多少行
 -B        #显示过滤出来内容在原文本中的上多少行
 -C        #向上向下各多少行

 

过滤以HTTP开头的行

grep '^HTTP' /opt/logstash/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.3.4/patterns/legacy/httpd

 

 过滤以}结尾的行

grep '}$' /opt/logstash/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.3.4/patterns/legacy/httpd

 

 将空行过滤掉,这里结合grep的-v参数配合正则去过滤

grep -v '^$' /opt/logstash/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.3.4/patterns/legacy/httpd

 

使用转义符取消字符的属性从而匹配符合的内容

grep '\?' /opt/logstash/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.3.4/patterns/legacy/httpd

 

匹配任意字符,除了空行

grep '.' /opt/logstash/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.3.4/patterns/legacy/httpd

 

 匹配所有,包含空行(对比上下图可以看到,下面图是有匹配空行的,上图没有匹配空行)

grep '.*' /opt/logstash/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.3.4/patterns/legacy/httpd

 

匹配含有特定字符的行

grep '[ab]' /opt/logstash/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.3.4/patterns/legacy/httpd

 

匹配含有特定字符串的行

grep -E '(or)' /opt/logstash/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.3.4/patterns/legacy/httpd

 

排除开头含有[]中任意字符的行

grep '^[^H#]' /opt/logstash/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.3.4/patterns/legacy/httpd

 

匹配含有数字的行,此处使用正则符号*,匹配的数字至少需要出现0次以上(在引入两个命令做统计,sort统计相同的行数,uniq -c是去重)

grep -E  '[0-9]*' /opt/logstash/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.3.4/patterns/legacy/httpd |sort |uniq -c

 匹配含有数字的行,此处使用正则符号+,匹配的数字至少需要出现1次以上(对比上下图的匹配可以发现,使用正则符号*和+的区别,因为*至少匹配的数字出现0次以上就可以,所以可以匹配到所有的行包括空行,而+至少匹配的数字出现1次以上才可以,所以只能匹配到带数字的行)

 grep -E  '[0-9]+' /opt/logstash/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.3.4/patterns/legacy/httpd |sort |uniq -c

 

 匹配含有数字的行,此处使用正则符号+,匹配的数字只能出现0次或者1次(看下图的效果与正则符号*的输出对比可以看到,*是可以连续匹配0次以上,而?只能匹配0次或者一次,所以?的输出结果每次只能输出一位数字,而*对于连续的数字可以一直匹配,此处使用了grep的-o参数是只输出匹配的结果,不输出其它内容)

grep -Eo '[0-9]?' /opt/logstash/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.3.4/patterns/legacy/httpd

 

匹配至少连续匹配1个数字,至多连续匹配两个数字的行(可以看一下两条命令输出的对比)

grep -E '[0-9]{1,2}' /opt/logstash/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.3.4/patterns/legacy/httpd

grep -E '[0-9]{2,3}' /opt/logstash/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.3.4/patterns/legacy/httpd

 

匹配多个特定字符串的行(以下两种方式都可以)

grep -E 'client|pid' /opt/logstash/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.3.4/patterns/legacy/httpd

grep -E '(client|pid)' /opt/logstash/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.3.4/patterns/legacy/httpd

 

匹配ip地址(ip地址的每一位都有可能是1位数或者2位数或者3位数,所以使用{,}来限定最少匹配一位最多匹配三位,而且ip地址中的.需要使用转义符\来转移,不然的话就会相当于正则符.的功能匹配任意字符了)

ip add | grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'

ip add | grep -oP '\b(\d{1,}\.)(\d{1,3}\.)(\d{1,3}\.)\d{1,3}\b'

 

匹配身份证号(以下两个命令都可以匹配)

grep -Eo '[0-9]{17}[0-9X]{1}' 1.txt

grep -Eo '[0-9X]{18}' 1.txt

 

零宽断言示例,去掉前后项取中间项

echo 44178124592350982X |grep -Po '(?<=4)[0-9]{16}(?=X)'

 

 

【shell系列】正则表达式30分钟入门教程 DATE: 2018-12-30 转载自:http://deerchao.net/tutorials/regex/regex.htm#mission 很好的正则表达式入门教程,值得学习!   首页 | 常用正则表达式 | 正则表达式测试工具 正则表达式30分钟入门教程 版本:v2.3.5 (2017-6-12) 作者:deerchao 转载请注明来源 目录 跳过目录 本文目标 ... 阅读详情

相关推荐

(Cascade extended state observer)级联ADRC的simulink仿真和程序---送给中国研究学者的精华版

(Cascade extended state observer)级联ADRC的simulink仿真和程序---送给中国研究学者的精华版

weixin_44312889的博客 3778

Shell基础—正则表达式(通配符、模式表达式)详解【附例】

Shell基础—正则表达式(通配符、模式表达式)详解【附例】

小微ꦿ的博客 4248

【Unity Shader】2D模型 3D模型混用的穿模问题(Spine在3D场景中出现前后穿模问题的解决办法)

问题描述: 在3D场景中使用Spine模型(2D), 因为Spine需要像Billboard类似的处理,永远是垂直与相机的, 所以一般情况下2D模型能正常显示且前后的阻挡关系也是没有问题的,如下图所示,一切都很美好.(这里用一个四边形,图中的福字表示2D模型) 可是如果后面蓝色的格子比较高,或者2D角色本身也比较高,那么就会出现模型穿插的问题,如下图所示: 如果吧2D模型竖立起来,前后关系肯定是没有问题的,所以也能避免模型穿插的问题,可是就没有Billboard效果,圆形的福字已经被压扁了,如下图:

Vitens的专栏 4591

Linux shell脚本中正则

grep、sed、awk 使用建议 grep: 文本过滤工具,如果仅仅是将文本过滤下显示出来的话,建议使用grep。 sed:Stream EDitor,流编辑器,默认只处理模式空间,不处理原数据,如果处理的数据是针对行进行处理的,可以使用sed。 awk: 数据分析、处理工具,报告生成器,格式化以后显示。如果对处理的数据需要生成报告之类的信息,或者处理的数据是按列进行处理的,最好使用awk。 正则表达式 是什么:使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。 作用 从字符串中提取子串 查找、替

weixin_46048542的博客 802

STM32 HardFault调试:寄存器分析与堆栈回溯实战

HardFault是Cortex-M内核中最关键的不可屏蔽异常,本质是处理器对非法指令执行、内存访问越界、堆栈溢出等底层硬件错误的强制响应。其原理根植于ARMv7-M异常模型,通过自动压栈保存xPSR/PC/LR等核心寄存器实现上下文捕获。技术价值在于为嵌入式系统提供确定性故障归因能力,支撑高可靠工业设备开发。典型应用场景涵盖FreeRTOS任务崩溃定位、DMA中断越界诊断及MPU保护机制验证。本文聚焦STM32平台,深入解析LR寄存器低4位判别堆栈模式、基于MSP/PSP的PC地址提取方法,并结合Keil

weixin_30951515的博客 143

Epicor ERP 界面新增客制化字段操作方法

我发现国内对于epicor这个erp软件的教程非常少,所以录制一些我实际遇到的需求,整理了实现过程,提供给大家参考。

cqxianggang的专栏 413

shell正则

或 x|y 匹配x或y z|food 匹配z或food [zf]ood 匹配zood 或food(m|f)ood。\{n,\} 前面的字符最少重复n次 大于n次。\{,n\} 前面的字符最多重复n次 小于n次。\{n\} 匹配前面的字符刚好重复n次。\{n,m\} 前面的字符重复n次到m次。\S 匹配一个任何可见字符 相当于[^\f\n\r\t\v]\s 匹配一个不可见字符 相当于[\f\n\r\t\v][A-Z] 大写字母。

weixin_49888561的博客 193

YOLOv11涨点改进 | Conv篇/小目标改进 | YOLOv11引入SPDConv卷积特征无损下采样模块,增加YOLOv11小目标P2检测层(助力小目标任务高效涨点)

本文提出了一种创新的SPDConv模块来优化YOLOv11模型,通过空间到深度(SPD)层和非步幅卷积层实现特征无损下采样。该方法有效解决了传统CNN中因跨步卷积和池化层导致的细粒度信息丢失问题,特别提升了小目标检测性能。实验表明,SPDConv在目标检测和图像分类任务中显著优于现有SOTA模型。文章详细介绍了模块原理、核心代码实现,并提供了YOLOv11集成SPDConv的具体方法,包括配置文件修改和P2层增强等优化技巧。该技术为计算机视觉任务提供了一种高效的特征保留方案。

Ai缝合怪、助力小伙伴高效发论文 586

Shell的正则表达式入门、常规匹配、特殊字符:^、$、.、*、字符区间(中括号):[ ]、特殊字符:\、匹配手机号

记得加大写的-E,因为目前grep不支持{9}的扩展的正则的,所以需要加上-E,表示支持扩展的正则表达式。匹配任意字符,可以和^$连用,放在他们中间用,就可以将下面的代码实现,以a开头,login结尾的行。[a-c,e-f]-匹配a-c或者e-f之间的任意字符。记得加大写的-E,因为目前grep不支持{9}的扩展的正则的,所以需要加上-E,表示支持扩展的正则表达式.* 匹配什么?匹配任意字符,可以和^$连用,放在他们中间用,就可以将下面的代码实现,以a开头,login结尾的行、思考:^$ 匹配什么?匹配空行

Redamancy06的博客 5640

ESP8266-Arduino网络编程实例-异步TCP客户端

本次实例将使用ESPAsyncTCP库实现一个简单的客户端。

视觉与物联智能 1741

嵌入式面经(2)——央企篇

前文得知我只投央企,不投国企,有面试的央企大致有三类:感兴趣的同学可以和我私聊军工央企相关(航空航天,兵器兵工)制造央企相关(三桶油,装备制造)金融运维相关(信通集团,国有银行)接下来我将对我有的面试中询问的面经进行总结。

coldmood77的博客 468

正则表达式grep

文章目录一:正则表达式grep:(一)、形式因:grep是什么?(二) 、目的因:为什么学习grep?(三)、质料因:grep由什么组成?1、、正则表达式元字符:(1)、字符匹配:(2)、匹配次数(量词):用在要指定次数的字符后面,用于指定前面的字符要出现的次数:(3)、位置锚定:(4)、分组:二、扩展正则表达式egrep:(一)、质料因:egrep由什么组成:1、字符匹配:2、次数匹配(量词):3、位置锚定:4、分组:5、或者:三、方法论:如何使用grep? 一:正则表达式grep: (一)、形式因:gr

gao646467783的博客 550

Allan方差这个工具,怎么把它用的更顺手?(附Allan方差、动态Allan方差代码)

本文详细说明了Allan方差和动态Allan方差的计算过程,并通过递归运算和时间序列选择两种算法提高动态Allan方差的计算效率。文末提供了快速动态Allan方差计算代码。

victoryqian528的博客 374

Shell脚本:正则运算从入门到精通

正则表达式是一种用于描述字符串模式的表示方法。它由一系列字符和特殊符号组成,用来定义一个搜索模式。这个模式可以用来匹配、查找和管理文本。正则表达式的强大之处在于它的灵活性和精确性。通过组合不同的字符和元字符,我们可以创建出几乎任何复杂的文本模式,从简单的单词匹配到复杂的数据验证规则。

IT策士的博客 775

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

shell 之 正则表达式入门

正则表达式入门 ​ 正则表达式使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。在很多文 本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。在Linux中, grep,sed,awk等命令都支持通过正则表达式进行模式匹配。 1 常规匹配 一串不包含特殊字符的正则表达式匹配它自己,例如: [xiao@hadoop105 ~]$ cat /etc/passwd | grep xiao xiao:x:1001:1001::/home/xiao:/bin/bash 就会匹配所有包含 xia

weixin_49063354的博客 215

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

shell——正则表达式入门

shell中总是会需要对文本字符串做各种各样的剪切拼接等操作,除了 basename 和 dirname 这种简单的函数外,还可以用正则表达式,定义模糊匹配的筛选规则。

m0_73716246的博客 1140

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Shell——正则表达式入门

正则表达式使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。在Linux 中,grep,sed,awk 等文本处理工具都支持通过正则表达式进行模式匹配。

chairon的博客 549

Shell编程入门总结(正则表达式篇)

1.1基础正则表达式 RE 字符 意义与范例 ^word 意义:待搜寻的字串(word)在行首! 范例:搜寻行首为 # 开始的那一行,并列出行号 grep -n '^#' regular_express.txt word$ 意义:待搜寻的字串(word)在行尾! 1.3扩展正则表达式 RE 字符 意义与范例 + 意义:重复『一个或一个以上』的前一个 RE 字符 范例:搜寻 (god) (good) (goood)... 等等的字串。 那个 o+ 代表『一个以上的 o 』所以,底下的运行成果会将第 1, 9,

追梦赤子心 1276

shell入门之----正则表达式

正则表达式RE 正则表达式基本元字符 正则表达式拓展元字符 用来处理文本 正则表达式(Regular Expression, RE)是一种字符模式, 用于在查找过程中匹配指定的字符. 在大多数程序里, 正则表达式都被置于两个正斜杠之间; 例如/l[oO]ve/就是由正斜杠界定的正则表达式, 它将匹配被查找的行中任何位置出现的相同模式. 在正则表达式中,元 字符是最重要的概念 元字符使正则表达...

qq_38514878的博客 319

shell 正则表达式入门&&grep 正则表达式入门

Shell正则表达式 1. shell 正则表达式的几种形式: cat txt no is ok so is ok ok is no so it is ok you are no so he is no so 12 is good 39 + 45 = 84 this is bad weather sono is bad boy. (1). grep  形式:  echo "

shuming的专栏 1320

Shell正则表达式实战:从入门到精通

本文详细介绍了Shell编程中的正则表达式使用,涵盖基础正则(BRE)、扩展正则(ERE)和POSIX字符类,重点讲解了grep、sed、awk三大工具的正则应用。内容包括:1) 正则表达式类型与核心工具支持;2) BRE和ERE的元字符详解及示例;3) 实际工具应用场景和高级技巧;4) 常见实用正则模式;5) 使用注意事项。通过大量可直接运行的示例,帮助读者全面掌握Shell正则表达式在文本查找、替换和分析中的高效应用。

超级运云 759

Shell编程从入门到精通——正则表达式

所谓正则表达式就是用来描述某些字符串匹配规则的工具。 一、什么是正则表达式 在程序的设计过程中,用户不可避免的需要进行文本的操作,而处理文本信息的时候通过正则表达式匹配想要的字符,可以避免通过复杂的代码来过滤文本,从而可以大大提高程序的可读性。 二、正则表达式基础 1. 正则表达式原理 通过正则表达式可以过滤文本,它通过定义一些列的元字符,通过元字符配合其他字符来表达一种规则,只有符合该规则的文本才能保留下来,不符合的就会被过滤掉。 所谓元字符是指用来描述字符的字符。元字符的作用在于对字符表达式的内容、.

random_w的博客 672

【Linux入门】十四、Shell编程1 -- 正则表达式

十四、Shell编程1 -- 正则表达式 1 正则表达式与通配符 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配(即匹配到的输出结果是包含匹配结果的那一行) grep、awk、sed等命令可以支持正则表达式。 通配符用来匹配符合条件的文件名,通配符是完全匹配。 ls、find、cp这些命令不支持正则表达式,所以只能用Shell自己的通配符来进行匹配了。 2 基础正则表达式 ...

OMG 368

【Shell与正则】

Shell与正则

weixin_44890576的博客 144

Linux0基础入门,教你如何在Shell中使用正则表达式

你可能注意到了,我之前演示邮编的例子的时候,必须在每个字符组中列出所有可能的数字,这实在有点麻烦。sed 编辑器用删除命令 d 来删除匹配该正则表达式模式的行,因此删除了文本中的所有空白行。现在你只需要在 gawk 程序中创建一个使用该正则表达式的简单脚本,然后用这个脚本来过滤你的电话薄。如果要确保只匹配五位数,就必须将匹配的字符和其他字符分开,要么用空格,要么像这个例子中这样,指明它们就在行首和行尾。在转义特殊字符时,你需要在它前面加一个特殊字符来告诉正则表达式引擎应该将接下来的字符当作普通的文本字符。

qq_43416206的博客 378
上一篇: elk搭建
下一篇: elk中logstash的使用
Apex   Predator
博客等级 码龄6年 9371粉丝 289原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值