30_正则练习题2

news/2025/3/16 20:02:13/文章来源:https://www.cnblogs.com/yangzaikai/p/18775500

正则练习题


  1. 正则含义

    • 1.1 基础正则

      ^       以什么开头,"^yuchao" 表示匹配以yuchao单词开头的行
      $       以什么结尾,"yuchao$",表示匹配以yuchao单词结尾的行
      ^$      组合符号,表示空行。逻辑解释就是以^开始,以$结尾的行
      .       匹配任意且只有一个字符,但是不匹配空行
      \       转义字符,让特殊符号失效,如"\."只表示小数点
      *       匹配前一个字符(连续出现)0次或1次以上,注意,当重复0次的时候,表示什么也没有,但是会撇皮所有内容
      .*      组合符,匹配所有内容
      [abc]   匹配[]内包含的任意一个字符a或b或c
      [a-z]   匹配[]内包含a-z任意一个字符
      [0-9]   匹配[]内包含0-9的任意一个数字
      [^abc]  匹配不包含^后的任意字符a或b或c,这里的^表示对[abc]的取反,与在外面的^意义不同
      
    • 1.2 扩展正则

      +       匹配前1个字符1次或多次
      [:/]+   匹配括号内的 ":" 或 "/" 字符1次或多次
      ?       匹配前一个字符0次或1次
      |       表示或者,即同时过滤多个字符串
      ()      分组过滤,被括起来的内容表示一个整体,另外()的内容可以被后面的\n引用,n为数字,表示引用第几个括号的内容
      \n      引用前面()里的内容,例如(abc)\1 表示匹配abcabc
      a{n,m}  匹配前一个字符最少n次,最多m次
      a{n,}   匹配前一个字符最少n次
      a{,m}   匹配前一个字符最多m次
      a{n}    匹配前一个字符正好n次
      

      注:基础正则也可以使用扩展正则的符号,只是需要加\

  2. 基础正则练习题

    • 2.1 测试数据

      ➜  ~ vim bre.txt
      I am teacher yuchao.
      I teach linux,python.
      testtttsss000123566666I like video,games,girls
      #I like girls.
      $my blog is http://yuchaoit.cn/
      #my site is https://www.cnblogs.com/pyyu
      My qq num is 877348180.
      my phone num  is 15210888008.
      
    • 2.2 查找I开头的行

      ➜  ~ grep '^I' bre.txt 
      I am teacher yuchao.
      I teach linux,python.
      I like video,games,girls
      
    • 2.3 查找以任意字符结尾的行

      # 1. 查找以u结尾的行
      ➜  ~ grep 'u$' bre.txt 
      #my site is https://www.cnblogs.com/pyyu# 2. 查找以 . 结尾的行
      ➜  ~ grep '\.$' bre.txt 
      I am teacher yuchao.
      I teach linux,python.
      #I like girls.
      My qq num is 877348180.
      my phone num  is 15210888008.
      
    • 2.4 排除注释行和空行

      # 1. 使用扩展正则
      ➜  ~ grep -Ev '^$|^#' bre.txt
      I am teacher yuchao.
      I teach linux,python.
      testtttsss000123566666
      I like video,games,girls
      $my blog is http://yuchaoit.cn/
      My qq num is 877348180.
      my phone num  is 15210888008.# 2. 使用基本正则
      ➜  ~ grep -v '^$\|^#' bre.txt 
      I am teacher yuchao.
      I teach linux,python.
      testtttsss000123566666
      I like video,games,girls
      $my blog is http://yuchaoit.cn/
      My qq num is 877348180.
      my phone num  is 15210888008.# 3. 找出以I开头,s结尾的行
      ➜  ~ grep -E '^I.*s$' bre.txt
      I like video,games,girls
      
    • 2.5 匹配除空行以外的所有字符(包含空格)

      ➜  ~ grep -n '.' bre.txt
      1:I am teacher yuchao.
      2:I teach linux,python.
      3:testtttsss000123566666
      5:I like video,games,girls
      6:#I like girls.
      7:$my blog is http://yuchaoit.cn/
      8:#my site is https://www.cnblogs.com/pyyu
      9:My qq num is 877348180.
      10:my phone num  is 15210888008.
      

      注:.不匹配空行及\n

    • 2.6 找出以$开头的行

      # 方法1:
      ➜  ~ grep '^\$' bre.txt    
      $my blog is http://yuchaoit.cn/# 方法2:
      ➜  ~ grep '[$].*' bre.txt 
      $my blog is http://yuchaoit.cn/
      
    • 2.7 匹配字符

      # 1. 匹配小写字母的单词
      

    # 2. 找出以 . 或者s结尾的行
    ➜  ~ grep -E '\.$|s$' bre.txt 
    I am teacher yuchao.
    I teach linux,python.
    I like video,games,girls
    #I like girls.
    My qq num is 877348180.
    my phone num  is 15210888008.# 3. 找出以I开头,且结尾不是.的行
    ➜  ~ grep -E '^I.*[^.]$' bre.txt   
    I like video,games,girls
    
  3. 扩展正则练习题

    • 3.1 测试数据

      ➜  ~ cat ere.txt 
      I am teacher yuchao.
      I teach linux,python.
      testtttsss000123566666I like video,games,girls
      #I like girls.
      $my blog is http://www.yuchaoit.cn
      #my site is https://www.cnblogs.com/pyyu
      My qq num is 877348180.
      my phone num  is 15210888008.
      
    • 3.2 匹配手机号

      # 方法1:
      ➜  ~ grep -Eo '\b[1][3456789][0-9]{9}\b' ere.txt
      15210888008# 方法2:
      ➜  ~ grep -o '\b[0-9]\{11\}\b' ere.txt
      15210888008
      
    • 3.3 匹配QQ号

      ➜  ~ grep -Eo '\b[0-9]{5,9}\b' ere.txt
      877348180# QQ号码的位数通常为5-9位
      
    • 3.4 查找出所有单词中出现字母连续的行(比如: wwwhttp

      image-20220412143207593

      ➜  ~ grep -Eo '([a-z])\1' ere.txt -n
      3:tt
      3:tt
      3:ss
      7:tt
      7:ww
      8:tt
      8:ww
      8:yy
      9:qq➜  ~ grep -E '([a-z])\1' ere.txt -n 
      3:testtttsss000123566666
      7:$my blog is http://www.yuchaoit.cn
      8:#my site is https://www.cnblogs.com/pyyu
      9:My qq num is 877348180.
      
    • 3.5 只查找出同一个字母连续3次的行,比如www

      ➜  ~ grep -Eo '([[:alpha:]])\1{2}' ere.txt 
      ttt
      sss
      www
      www
      

      image-20220412143646165

    • 3.6 提取网址

      # 方法1:
      ➜  ~ grep -E '(www).*(com|cn)' ere.txt -o
      www.yuchaoit.cn
      www.cnblogs.com# 方法2:限制二级域名只包括字母数字不含特殊字符(根据文件内容进行正则定制化配置)
      ➜  ~ grep -E '([[:alpha:]])\1{2}\.[[:alnum:]]+\.[[:alpha:]]{2,3}' ere.txt -o
      www.yuchaoit.cn
      www.cnblogs.com
      
    • 3.7 提取完整网址

      # 方法1:提取域名不包括uri信息
      ➜  ~ grep -E '[a-z]{4,5}:[/]{2}([[:alpha:]]+\.){2}[[:alpha:]]{2,3}' ere.txt -o
      http://www.yuchaoit.cn
      https://www.cnblogs.com# 方法2:提取域名的URL及URI信息
      ➜  ~ grep -E '[a-z]{4,5}:[/]{2}([[:alpha:]]+\.){2}[[:alpha:]]{2,3}[/]?.*' ere.txt -o
      http://www.yuchaoit.cn
      https://www.cnblogs.com/pyyu# 方法3:简便写法
      ➜  ~ grep -E 'http[s]?.*' ere.txt -o
      http://www.yuchaoit.cn
      https://www.cnblogs.com/pyyu
      
  4. 实战练习

    • 4.1 排除配置文件的注释、空行

      # 方法1:推荐使用
      ➜  ~ grep -Env '^#|^$' ere.txt 
      1:I am teacher yuchao.
      2:I teach linux,python.
      3:testtttsss000123566666
      5:I like video,games,girls
      7:$my blog is http://www.yuchaoit.cn
      9:My qq num is 877348180.
      10:my phone num  is 15210888008.#方法2:
      ➜  ~ grep -nv -e '^$' -e '^#' ere.txt 
      1:I am teacher yuchao.
      2:I teach linux,python.
      3:testtttsss000123566666
      5:I like video,games,girls
      7:$my blog is http://www.yuchaoit.cn
      9:My qq num is 877348180.
      10:my phone num  is 15210888008.# 方法3:(注意:此处的行号并非原文件行号,是匹配后重新排序的行号)
      ➜  ~ grep -v '^#' ere.txt | grep -nv '^$'
      1:I am teacher yuchao.
      2:I teach linux,python.
      3:testtttsss000123566666
      5:I like video,games,girls
      6:$my blog is http://www.yuchaoit.cn
      7:My qq num is 877348180.
      8:my phone num  is 15210888008.
      
    • 4.2 查找某进程是否存在,过滤grep临时进程

      ➜  ~ ps -ef | grep 'sshd' | grep -v 'grep' 
      root       1011      1  0 Apr09 ?        00:00:00 /usr/sbin/sshd -D
      root       6505   1011  0 Apr11 ?        00:00:17 sshd: root@pts/0,pts/1
      
    • 4.3 查看sda磁盘的使用率

      # 方法1:
      ➜  ~ df -h /dev/sda | grep -Eo '[[:digit:]]{1,3}%'
      0%# 方法2:
      ➜  ~ df /dev/sda | grep -Eo '[0-9]+%'
      0%
      
    • 4.4 查看根分区的磁盘使用率

      # 方法1:
      ➜  ~ df / | grep -Eo '[[:digit:]]+%'
      22%# 方法2:
      ➜  ~ df | grep '/$' | grep -Eo '[0-9]{1,3}%'
      22%
      
    • 4.5 取出IP地址

      # 方法1:
      ➜  ~ ifconfig ens33 | grep 'inet\b' | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | head -1
      10.0.0.10# 方法2:
      ➜  ~ ifconfig ens33 | grep -E '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' -o | head -1
      10.0.0.10# 方法3:
      ➜  ~ ifconfig ens33 |grep 'inet\b' |  grep -E '([0-9]{1,3}[\.]?){4}' -o | head -1
      10.0.0.10# 方法4:
      ➜  ~ ifconfig ens33 | grep 'inet\b' | grep -E '([[:digit:]]{1,3}[\.]?){4}' -o | head -1
      10.0.0.10# 方法5:
      ➜  ~ ip address show ens33 | grep 'inet\b' | grep -E '([0-9]+[.]?){4}' -o | head -1
      10.0.0.10
      
    • 4.4 统计出系统中所有禁止登录的用户且只显示用户名

      # 方法1:
      ➜  ~ grep 'nologin' /etc/passwd | grep -Eo '^[[:alnum:]]+'# 方法2:
      ➜  ~ grep 'nologin' /etc/passwd| grep -Eo '^[a-zA-Z0-9]{1,}'  # 方法3:
      ➜  ~ sed -nr '/nologin/s#^([[:alnum:]]+):.*#\1#p' /etc/passwd# 方法4:
      ➜  ~ grep 'nologin' /etc/passwd | sed -nr 's#^([[:alnum:]]+):.*#\1#p'
      
    • 4.5 找出由root创建的用户

      # 方法1:
      ➜  ~ grep -E '[0-9]{4,}' /etc/passwd# 方法2:
      ➜  ~ grep -E '[[:digit:]]{4,}' /etc/passwd# 方法3:
      ➜  ~ sed -nr 's/^([[:alnum:]]+):.*([0-9]{4,}):.*/user:\1   id:\2  /p' /etc/passwd
      user:jack   id:1000  
      user:andy   id:1004  
      user:mike   id:1005  
      user:jack01   id:1006  
      user:pyyu   id:1007  
      

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker-compose 安装elasticsearch

安装版本 elasticsearch 8.14.1 拉取镜像 docker pull elasticsearch:8.14.1如需安装kibana 需要拉取对应版本的kibana镜像 docker pull kibana:8.14.1查看镜像是否安装成功 docker images配置docker-compose.yaml version: 3 services:es:# 镜像名称image: elasticsearch:8.14…

求阶乘

关于最少尾数0的个数,只有2的倍数与5的倍数相乘才能得到0,显然2的倍数比5的倍数多的多,现在目标找5的倍数的个数#include<bits/stdc++.h> #define endl "\n" #define int long long #define x first #define y second using namespace std; typedef long lo…

Visual Studio Code-设置展示多行TAB页

Visual Studio Code-设置展示多行TAB页 一、ctrl + shift + p -> 打开工作区设置(Open Workspace Settings 二、输入 ‘workbench.editor.wrapTabs’

Git-git生成SSH密钥

Git-git生成SSH密钥 一、生成 SSH 密钥 如果你还没有生成 SSH 密钥,可以使用以下命令生成新的 SSH 密钥对: 这里 -t rsa 指定密钥类型为 RSA,-b 4096 指定密钥长度为 4096 位,-C 添加一个注释,通常是你的电子邮件地址。 ssh-keygen -t rsa -b 4096 -C "your_email@ex…

鲜花:《一种基于错误的寻找重心方法的点分治的复杂度分析》注

原文:一种基于错误的寻找重心方法的点分治的复杂度分析 LCA 还是太神了,研究半天才看明白。 所以这里提供一种说人话版本。 为什么法一是错的? 原文提出了这样一个 hack:这是三个等长度的共端点的链,初始以红色箭头所指的点为根。 进行第一次分治:红色箭头所指的点是重心…

SpringBoot的WebServlet的兼容

一.使用SpringBean注册JavaWeb的三大组件 在 Spring Boot 中,使用 @Bean 注册的 Servlet、Filter 和 Listener 组件会被加载到 Servlet 容器 中管理,而不是直接由 Spring 容器管理。然而,Spring Boot 提供了一些机制来确保这些组件能够与 Spring 容器无缝集成。Servlet 容器…

第二章课上练习

TempConvert.py TempStr = input("请输入带有符号的温度值:") if TempStr[-1] in [F,f]: C = (eval(TempStr[0:-1]) - 32)/1.8 print("转换后的温度是{:.2f}C".format(C)) elif TempStr[-1] in [C,c]: F = 1.8*eval(TempStr[0:-1])+32 print("转换后…

叠加等边三角形

import turtle 设置画布和画笔 screen = turtle.Screen() screen.bgcolor("white") # 设置背景颜色 pen = turtle.Turtle() pen.shape("turtle") # 设置画笔形状为小乌龟 pen.color("blue") # 设置画笔颜色 pen.pensize(2) # 设置画笔…

Citia Composer2024软件下载与安装教程

CATIA是法国达索公司的产品开发旗舰解决方案。作为PLM协同解决方案的一个重要组成部分,CATIA软件具有以下主要功能和应用领域:‌设计‌:提供从概念设计到最终产品形成的完整设计能力,支持2D、3D、参数化混合建模及数据管理‌3。 ‌分析‌:进行产品分析和仿真,确保设计的可…