码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • shell脚本之正则表达式


    内容预知

    1.正则表达式的介绍

     1.1 正则表达式的组成

    1.2正则表达式和通配符的区别

     2.基础正则表达式

    2.1 转义字符的运用

     2.1.1 将特殊含义的字符转换为普通字符的含义

    2.1.2 将普通字符转换为特殊作用的字符 

     2.2  基础正则表达式实际应用

    2.2.1 查看以xxx为开头  和查看以xxx为结尾的文件内容

     2.2.2 匹配单个任意字符或者多个任意字符

    2.2.3  匹配列表内容和匹配非列表中的内容

    2.2.4 对子表达式进行多次或者限定次数的匹配 

     3.拓展正则表达式

    3.1 拓展正则表达式的基本用法 

     3.2 拓展正则表达式的实际运用

     4.正则表达式的组合筛查运用

     4.1 按要求匹配输出规定的电话号码

    4.2按照要求匹配出规定格式的邮箱

     总结


     

    1.正则表达式的介绍

     1.1 正则表达式的组成

     

    正则表达式是由普通字符与元字符组成:

    • 普通字符 包括大小写字母、数字、标点符号及一些其他符号。

    • 元字符 是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符或表达式)在目标对象中的出现模式。

    1.2正则表达式和通配符的区别

     

     通配符:在Linux中,一般配合find命令用于对文件目录,文件名的查找

     

    正则表达式:匹配文件内容,用于精确筛选信息,可以配合grep,egrep,awk,sed命令进行搭配使用,查找时,也比通配符更加精确

     

     2.基础正则表达式

     适合awk,sed,grep,egrep等文本工具使用

     

    元字符作用
    \转义字符,用于取消特殊符号的含义
    ^匹配字符串开始的位置
    $匹配字符串结束的位置
    .匹配除\n之外的任意的单个字符
    *匹配前面子表达式0次或者多次
    [list]匹配list列表中的一个字符(列表中只要有一个符合即可)
    [^list]匹配任意非list列表中的一个字符
    \ {n\ }匹配前面的子表达式n次
    \ {n,\ }匹配前面的子表达式不少于n次
    \ {n,m\ }匹配前面的子表达式n到m次(m必须大于n,不然会报错)

     注意:egrep、 awk使用{n}、{n,}、{n, m}匹配时 "{ }" 前不用加" \ "

     

    2.1 转义字符的运用

     2.1.1 将特殊含义的字符转换为普通字符的含义

    被转义的特殊字符转义前的含义作用
    \ =具有赋值的作用,或则进行字符判断
    \ !有取反的作用(除了。。。。)
    \ &单个&符可以将命令挂在后台上,两个是逻辑符号且的作用
    \ $取值变量的作用

    2.1.2 将普通字符转换为特殊作用的字符 

     

    被赋予新含义的普通字符现在拥有的作用
    \n拥有换行的作用
    \t转化为制表符(能让输出结果呈现表格的格式)
    \w(小写)匹配包括下划线的任何单词字符
    \W(大写)匹配任何非单词字符。等通于"[^A-Za-z0-9_]"
    \r转换后是回车符
    \d匹配一个数字字符
    \D匹配一个非数字字符。等价于[^0-9]
    \s(小写)空白符
    \S(大写)非空白符

     2.2  基础正则表达式实际应用

    2.2.1 查看以xxx为开头  和查看以xxx为结尾的文件内容

     

    1. [root@localhost tr]#grep '^1' math.txt
    2. [root@localhost tr]#grep '3$' math.txt

     2.2.2 匹配单个任意字符或者多个任意字符

     

    1. [root@localhost tr]#grep 'g.d' english.txt
    2. [root@localhost tr]#grep 'g.*d' english.txt

     

     

    2.2.3  匹配列表内容和匹配非列表中的内容

     

    1. [root@localhost tr]#head -n10 /etc/passwd |grep '[root]'
    2. [root@localhost tr]#head -n10 /etc/passwd |grep '[^root]'

     

     

    2.2.4 对子表达式进行多次或者限定次数的匹配 

     

    1. [root@localhost tr]#grep "go\{1\}" english.txt
    2. [root@localhost tr]#egrep "go{2,}" english.txt
    3. [root@localhost tr]#egrep "go{5,8}" english.txt

     

     

     3.拓展正则表达式

    3.1 拓展正则表达式的基本用法 

     支持awk和egrep使用,如果grep和sed想要正常使用(grep -E  sed -r)

     

    元字符作用含义
    +匹配前面子表达式1次及以上
    ?匹配前面子表达式0次或者1次
    ()将括号中的字符串作为一个整体
    |以"或"的方式匹配字符串

     

     3.2 拓展正则表达式的实际运用

     

    1. [root@localhost tr]#egrep 'go+d' english.txt
    2. [root@localhost tr]#egrep 'go?d' english.txt
    3. [root@localhost tr]#egrep '(good)' english.txt
    4. [root@localhost tr]#egrep 'good|fgod' english.txt

     

     4.正则表达式的组合筛查运用

     4.1 按要求匹配输出规定的电话号码

     

     匹配要求:

    1. 匹配 0512 开头的区号
    2. 区号与后面的号码以"-"或则空格或则没有
    3. 电话号码要5 或者 8开头的八位数。
    [root@localhost zhengze]#egrep "^(0512)[- ]?[58][0-9]{7}$" phone.txt 
    

     

    4.2按照要求匹配出规定格式的邮箱

     

     匹配要求:

     

    1.用户名@的长度为6-18位,任意大小写的英文字母,任意数字,除了@和空格以外的任意符号,

    开头只能是_或者英文字母

     2.子域名(二级域):任意长度,符号只能使用"-"或者"_"或者"."

    3.  .顶级域:长度位2-5,任意大小写的英文

     

    [root@localhost zhengze]#egrep '^[a-zA-Z][^@ ]{5,17}@[a-zA-Z0-9\-\._]+\.[A-Za-z]{2,5}$' email.txt 
    

     

     

     总结

     1.grep和sed若想使用拓展正则表达式式,必须是(grep -E     sed  -r)

    2.在正则表达式的组合匹配中,要注意匹配一些文本内容中的特殊字符时,先使用转义字符,将特殊字符变为普通字符

  • 相关阅读:
    redis学习笔记
    nydusd 源码理解(一)
    《丞相好梦中杀人,我喜梦中听课》(1)密码学入门
    ESP8266-Arduino编程实例-L9110直流电机驱动
    JS数组转对象,JS对象转数组
    安装PyCharm(最完整版)
    大疆 dji mini4pro 不同充电器头 充电速度
    LeetCode 93 Java 实现
    了解多媒体展厅弧幕投影系统收费构成,轻松制定预算
    【算法设计与分析】— —基础概念题(one)可作为日常联系或期末复习
  • 原文地址:https://blog.csdn.net/qq_62462797/article/details/126711109
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号