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

shell正则表达式

1.正则表达式

正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等.

作用: 进行数据检索、数据处理

数据检索,一般针对的,日志文件(非结构化数据)

2.应用场景

  1. 数据验证 (表单验证、手机、邮箱、ip)

  2. 数据检索(数据检索、数据抓取)

  3. 数据过滤(敏感词过滤)(数据脱敏)

3.正则表达式详解

分为两部分: 1.普通字符匹配 2. 正则匹配符匹配

普通字符匹配:精准匹配

正则匹配字符:模糊匹配

正则匹配三步走:① 查什么 ② 查多少 ③ 从哪查

☆ 查什么(元字符)

代码功能
.(我是一个英文状态下点号.)万能字符,匹配任意1个字符(除了\n)
[]匹配[ ]中列举的字符,字符簇,本身表示一个范围区间,每次只能匹配其中的某个字符
[^指定字符]匹配除了指定字符以外的所有字符,^托字节在字符簇中出现代表取反的意思
\d匹配数字,即[0-9],\d都称之为Perl风格语法
\D匹配非数字,即不是数字
\s匹配空白,即 空格,tab键
\S匹配非空白
\w匹配非特殊字符,即a-z、A-Z、0-9、_
\W匹配特殊字符,即非字母、非数字、非下划线

grep 选项-E 和-P 区别

普通用法:grep 关键词 字符串

正则用法:

grep -E 正则表达式 字符串

grep -P 正则表达式 字符串

只要字符串中没有""就使用 -E

注意: -E 还有一个就是-Ev: 是对匹配到的内容取反操作

-P 选项功能更强大;支持\d, \w, \b(单词边界)等

使用原则:一般优先使用-E,如果遇到\d、\w、\s的时候才会使用-P;如果正则表达式正确,但是-E匹配不到内容,尝试使用-P!!!

echo "abc123" |grep '[0-9]'
echo "abc123" |grep -P '\w'    # \w既包含字母、又包含数字还包含下划线
echo "abc123" |grep -E '[0-9a-zA-Z]'
echo "abc.123" |grep -E '.'    # 万能字符
echo "abc.123" |grep -E '\.'   # 匹配.点号
echo "abc123" |grep -E '[^0-9]'
echo "abc 123" |grep -P '\s'   # 匹配空格
echo "abc 123" |grep -P '\S'   # 匹配非空格

☆ 查多少(匹配符)

注意:它只能匹配前一个字符出现次数

代码功能
*匹配前一个字符出现0次或者无限次,即可有可无,简称0到多 (至少0次)
+匹配前一个字符出现1次或者无限次,即至少有1次,简称1到多 (至少1次)
?匹配前一个字符出现1次或者0次,即要么有1次,要么没有,简称0或1 (最少0次,最多1次)
{m}匹配前一个字符出现m次,{3},匹配前一个字符只能出现3次
{m,}匹配前一个字符至少出现m次,{3,},匹配前一个字符至少出现3次,相当于3到多
{m,n}匹配前一个字符出现从m到n次,{3,5},匹配前一个字符至少出现3次,至多出现5次

重点记住前四个

如果不确定要匹配内容的多少,也不确定具体要匹配什么内容,而是匹配所有内容。

特殊写法 => .* 匹配任何内容

正则可以编写为: <body>(.*)</body>

正则表达式中,有一个匹配原则(贪婪匹配):默认情况下,正则能匹配多的就不会匹配少的,我们把这种特性称之为贪婪匹配!!!

☆ 从哪查(定位符)

代码功能
^托字节,匹配字符串开头,^/dev:匹配以/dev开头的行
$匹配字符串结尾

注意:

1.可以只有开头,没有结尾

例子:可以以xxx开头查找

2.可以只有结尾,没有开头

例子:可以以xxx结尾查找

4. 分组、捕获、反向引用(重点)

作用: 主要是进行重复数据的匹配操作

举个栗子:1234-1111-1221-3333

在之前的匹配中,我们只能匹配连续的4位数字,如\d{4}或[0-9]{4}

要求:要求使用正则匹配1111以及3333这种格式的数字(特点:匹配4位连续相同的数字,内容完全相同)

要求:要求使用正则匹配1221这种格式的数字(特点:第1位和第4位内容相同,第2位和第3位内容相同)


☆ 分组(把相同的内容 分到1组)

在正则表达式中,通过一对圆括号括起来的内容,我们就称之为"分组"。

\d\d\d:匹配连续的3位数字

\d(\d)(\d) :正则表达式中\d\d\d中,(\d)(\d)就是分组(子表达式),一共有两个()圆括号,则代表两个分组

☆ 捕获

当正则表达式在字符串中匹配到相应的内容后,计算机系统会自动把分组所匹配的到内容放入到系统的对应缓存区中(缓存区从$1开始)

☆ 反向引用

在正则表达式中,我们可以通过\n(n代表第n个缓存区的编号)来引用缓存区中的内容,我们把这个过程就称之为"反向引用"。

案例1:

① 查找连续的四个数字,如:3569

答:[0-9]{4}或\d{4}

② 查找连续的相同的四个数字,如:1111

答:(\d)\1\1\1

③ 查找数字,如:1221,3443

答:(\d)(\d)\2\1

④ 查找字符,如:AABB,TTMM(提示:A-Z,正则:[A-Z])

答:([A-Z])\1([A-Z])\2

⑤ 查找连续相同的四个数字或四个字符(提示:\w)

答:(\w)\1\1\1

注:以上都是Perl风格写法,grep必须配合-P使用

小结:

作用:主要是进行重复数据的匹配操作

有几个小括号就有几个分组,执行顺序都是从左向右 => (\d)(\d)

http://www.xdnf.cn/news/13574.html

相关文章:

  • GFS分布式文件系统
  • 汽车电子行业的高效研发利器——全星研发项目管理APQP软件系统
  • 中国汽车启动电池市场深度剖析:现状、趋势与展望
  • Linux 查看两个主机之间时间是否同步 - clockdiff命令详解
  • 前端面试六之axios
  • 408考研逐题详解:2009年第38题
  • 【Kubernetes】架构与原理:核心概念、组件协同及容器化部署解析
  • 【考研数学:高数6】一元函数微分学的应用(二)——中值定理、微分等式和微分不等式
  • 鼠标右键添加新建某种文件的方法
  • Go并发模型与模式:context 上下文控制
  • 01.pycharm整合conda
  • 华为OD最新机试真题-对称美学-OD统一考试(B卷)
  • WinForm中实现Adobe PDF Reader实现旋转PDF功能
  • opencv vs2020正确的环境配置
  • 《HarmonyOSNext终极UIAbility手册:从启动模式到页面跳转,一网打尽!》
  • 菌菇食用攻略:从营养解析到安全指南,解锁科学食菌
  • 【JavaEE】-- HTTPS
  • 【Web】腾讯云 COS 静态网站部署与自定义域名 HTTPS 全流程
  • 【C++】来学习使用set和map吧
  • Python毕业设计226—基于python+爬虫+html的豆瓣影视数据可视化系统(源代码+数据库+万字论文)
  • 基于鸿蒙 HarmonyOS 5 打车小程序案例
  • 深入偏微分方程的世界-AI云计算
  • 金属工具制造企业如何做项目管理?数字化系统全面提升交付效率
  • 使用反汇编指令javap查看synchronized实现原理
  • Keepalived 与 Nginx 高可用部署方案详解
  • 【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
  • ROS move base 简易调试
  • 使用智能表格做项目工时管理
  • 软件开发和嵌入式开发岗位的面试题
  • 【深尚想】SN74HCT244DWR缓冲器/驱动器TI逻辑芯片 电子元器件解析