shell正则入门

news2024/12/24 0:16:17

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)'

 

 

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

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

相关文章

Spring Cloud Alibaba体系使用Nacos作为服务注册发现与配置中心

文章目录 Nacos介绍服务注册发现Nacos Discovery引入Nacos DiscoveryProvider和Consumer示例ProviderConsumer Nacos Discovery Starter其他配置选项 服务注册发现Nacos Config引入Nacos Config快速接入配置自动刷新profile粒度控制自定义namespace配置支持自定义Group支持自定…

UE5.2 LyraDemo源码阅读笔记(二)

UE5.2 LyraDemo源码阅读笔记&#xff08;二&#xff09; 创建了关卡中的体验玩家Actor和7个体验玩法入口之后。 接下来操作关卡中的玩家与玩法入口交互&#xff0c;进入玩法入口&#xff0c;选择进入B_LyraFrontEnd_Experience玩法入口&#xff0c;也就是第3个入口。触发以下请…

vue进阶-elementPlus

Element Plus官网 Element Plus 基于 Vue 3&#xff0c;面向设计师和开发者的组件库。减少开发者关注css&#xff0c;重心关注业务逻辑。 1. 入门 1.1 安装 npm install element-plus --save1.2 快速开始 1、main.js 引入并 use element-plus import { createApp } from …

C#,数值计算——灰色码(Gray Codes)的计算方法与源代码

一个 n位灰色码 序列&#xff0c;就是2的n次方 个 整数&#xff1b; 第一个数字为0&#xff1b; 相邻两个数字的二进制只有一位不一样&#xff1b; 第一个数字和最后一个数字的二进制也只有一位不一样。 using System; namespace Legalsoft.Truffer { /// <summary&…

ARM Exynos4412 硬件中断和GIC管理、PWM控制 6.28

day7 1.中断 硬件中断&#xff1a;直接让外部的硬件产生中断&#xff0c;CPU获取中断源并执行异常处理流程 1.需求&#xff1a;&#xff08;中断的原理一样&#xff0c;但外设是按键&#xff09;按键产生中断&#xff0c;并在中断处理中串口发送消息 2.原理图&#xff1a;U…

Mysql 5.6使用配置文件my.ini来设置长时间连接数据库

对于已经安装了mysql和未安装都是同样的步骤。在C:\Program Files (x86)\MySQL\MySQL Server 5.6下生成一个my.ini文件。然后删除或者修改my-default.ini的名字。 一、my.ini配置文件如下 [mysqld] basedirC:\Program Files (x86)\MySQL\MySQL Server 5.6 datadirC:\Program F…

STM32F407 基本定时器使用

介绍STM32F407基本定时器的配置方法&#xff0c;分别介绍轮询方式、中断方式使用定时器完成定时。 【1】定时器介绍 定时器相关的章节在STM32F4xx参考手册第14、15、16、17章节。 【2】基本定时器配置示例 增加一个Timer.c文件&#xff0c;代码如下 #include "timer.h…

【sql】SQL回顾总结,超级全

SELECT&#xff1a;语句用于从数据库中选取数据 从 "Websites" 表中选取 "name" 和 "country" 列 SELECT name,country FROM Websites 从 "Websites" 表中选取所有列 SELECT * FROM Websites; SELECT DISTINCT&#xff1a;用于返…

Nacos(一):简介 如何安装 服务注册与发现 集群 权重 与Eureka区别

一、简介 1、应用场景 当服务调用越来越多&#xff0c;服务的地址需要管理起来&#xff0c;并实现动态调用而不是硬编码在接口中。此时需要一个注册中心来帮助我们管理服务。 流程如下&#xff1a; 商品微服务注册IP和端口到注册中心订单微服务先从注册中心获取到商品微服务…

45 # 实现文件拷贝功能

下面实现边读边写的文件拷贝功能&#xff0c;这样不会淹没系统的可用内存&#xff0c;合理读写 const fs require("fs"); const path require("path");function copy(source, target, callback) {const SIZE 3;const buffer Buffer.alloc(SIZE);let r…

OPENCV 训练分类器一

第一步&#xff0c;安装OPENCV 见最新openCV-Python安装教程(opencv-python版本4.4.0, Python版本: 3.9)_python安装opencv_这个人不是画家的博客-CSDN博客 第二步&#xff0c;下面是修正过后的Python 将文件夹下面所有的图片转换成灰色小图像&#xff0c;用于存正片用的。…

Python几种字符串格式化方法

Python 字符串格式化方法 文章目录 Python 字符串格式化方法1.python中的字符串格式化--百分号 %2. 字符串格式化-数字精度控制 m.n3. 字符串格式化--快速写法 f"{变量}"4. 案例&#xff1a;股价计算小程序 1.python中的字符串格式化–百分号 % %的主要作用将数据转换…

android switch的使用

一、前言&#xff1a;很多app都有开关这个功能&#xff0c;开关控件的使用跟checkbox好像也差不多。 二、上代码 创建一个activity:SwitchDefaultActivity public class SwitchDefaultActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListene…

vue(脚手架创建)代理解决跨域问题

目录 为什么会出现跨域问题 什么是跨域 Vue CLI Vue2解决跨域问题 不重写路径 重写路径 vue.config.js代码 Vue3解决跨域问题 ViteVue解决跨域问题 vite.config.ts代码 总结 为什么会出现跨域问题 出于浏览器的同源策略的限制。同源策略是一种约定&#xff0c;它是…

【新版系统架构】第七章-系统架构设计基础知识(基于架构的软件开发方法)

软考-系统架构设计师知识点提炼-系统架构设计师教程&#xff08;第2版&#xff09; 第一章-绪论第二章-计算机系统基础知识&#xff08;一&#xff09;第二章-计算机系统基础知识&#xff08;二&#xff09;第三章-信息系统基础知识第四章-信息安全技术基础知识第五章-软件工程…

【go】数据表转csv

文章目录 1 基本结构1.1 数据1.2 数据结构 2 代码3 tip 1 基本结构 1.1 数据 1.2 数据结构 2 代码 代码&#xff1a; package mainimport ("database/sql""encoding/csv""fmt"_ "github.com/go-sql-driver/mysql""log"&q…

element ui table某个单元格添加点击事件

1.创建表格 <el-table ref"multipleTable" :data"tableData" border > <el-table-column fixed type"selection" align"center"></el-table-column> <div v-for"(item,index) in columns" :key"i…

在开源经历中成长,让开发者成为创新主体

本文背景 积极推进“满天星”行动计划&#xff0c;促进开发者成长&#xff0c;重庆软件园产业学院“成长营”将聚焦“技术提升”“职业成长”“价值提升”等话题开展系列主题活动&#xff0c;赋能软件技术开发者更好发展、更快成长。本次直播访谈&#xff0c;聚焦在开源经历中成…

车载 Android开发面试习题

随着车联网技术的不断发展和普及&#xff0c;越来越多的汽车厂商开始使用 Android 操作系统作为车载娱乐和信息娱乐系统的核心。在这个趋势下&#xff0c;车载 Android 应用开发程序员的需求也日益增加。 像一些车企大厂不惜给出 30K~60K的高资&#xff0c;去广招这方面的技术人…

为未来“点亮”想象空间:无镉量子点

量子点电视的诞生引发了行业内的色彩科技革命&#xff0c;量子点电视使用色彩纯净的量子点背光技术&#xff0c;能够最真实地还原图像色彩&#xff0c;是虚拟增强现实技术和智能可穿戴显示设备的理想之选。 量子点又可称为纳米晶&#xff0c;是一种由 II-VI 族或 III-V 族元素…