首页 > 系统相关 >Shell(二):正则表达式

Shell(二):正则表达式

时间:2023-10-12 19:33:27浏览次数:34  
标签:字符 Shell grep 符号 正则表达式 文件 匹配

1、元字符

  Shell的表达式是一串字符。元字符(Metacharacters)是用来阐释字符表达式意义的字符。元字符就是描述字符的字符,用于对字符表达式的内容、转换及各种操作信息进行描述。

2、正则表达式

  正则表达式是由一串字符和元字符构成的字符串,简称RE(Regular Expression)。正则表达式的主要功能是文本查询和字符串操作,可以匹配文本的一个字符或字符集合。

  正则表达式的数据处理过程:

  

  正则表达式的基本元素包括:普通字符 和 元字符。

  POSIX标准将正则表达式分为两类:基本的正则表达式 和 拓展的正则表达。

2.1、基本的正则表达式

  基本的正则表达式元字符集合及含义:

符号

含义

*

0个或多个在*字符之前的普通字符

.

匹配任意字符

^

匹配行首,或后面字符的非

$

匹配行尾

[]

匹配字符集合

\

转义符,屏蔽一个元字符的特殊意义

\<\>

精确匹配符号

\{n\}

匹配前面字符出现n次

\{n,\}

匹配前面字符至少出现n次

\{n,m\}

匹配前面字符出现n~m次

2.1.1、"*" 符号

  匹配前面一个普通字符的0此或多次重复,如 Jav*。

  "*"符号前是普通字符v,*字符表示匹配v字符0次或多次,如字符串Java、Javva、Javvvv。

2.1.2、"." 符号

  "."符号只能匹配一个字符,可以匹配一个空格,如...SC.。

  ..SC.表示前面两个字符为任意字符,第3和第4个字符是S和C,最后一个字符为任意字符,如 laSC8、P SC3。

2.1.3、"^"符号

  "^"符号用于匹配行首,表示行首的字符是 "^" 字符后面的那个字符,如 ^Shell,表示匹配以Shell开头的行。

2.1.4、"$"符号

  "$"符号匹配行尾,$符号放在匹配字符之后,与"^"符号的功能和用法都相反,如 Shell$,表示以Shell结尾的所有行。

  匹配所有空行:^$,行首与行尾间没有任何字符,为空行。

2.1.5、"[]"符号

  匹配字符集合,支持穷举法列出字符集合的所有元素,也支持使用"-"符号表示字符集合返回,表明字符集合范围从"-"左边字符看是,到"-"右边字符结束。

  任意数据的匹配方法:[0123456789] 或 [0-9]

  任意字符的匹配方法:[a-z] 、 [A-Z]

注意:

  "^"符号放在"[]"符号中,表示的是取反符号,如 [^c-e],表示不在 c ~ e 范围内的字符,实际上涵盖了除了小写字母 c、d和e之外的所有字符。

2.1.6、"\"符号

  "\"符号是转义符,用于屏蔽一个元字符的特殊意义,即以为字面含义结束"\"符号后面的元字符。

  如 "\.",经过转义后"."不在表示任意一个字符,而是一个普通字符 "."。

2.1.7、"\<\>"符号

  "\<\>"符号是精确匹配符号,该符号利用"\"符号屏蔽"<>"符号,如 \<she\> ,该正则表达式精确匹配She这个单词,不匹配包含 She 字符的单词,如Shell。

2.1.8、"\{\}"系列符号

  "\{\}"系列符号与"*"符号类似,都表示前一个字符的重复。但,"*"符号表示重复0次或任意次,而"\{\}"系列符号可以指定重复次数,"\{\}"系列符号包括以下三种形式:

\{n\}

匹配前面字符出现n次

JO\{3}\B -> 重复字符O 3次 -> JOOOB

\{n,\}

匹配前面字符至少出现n次

 

JO\{3,\}B -> 重复字符O 至少三次 -> JOOOB、JOOOOB

\{n,m\}

匹配前面字符出现n~m次

JO\{3,6\}B表示重复字符O至少3次,至多6次 -> JOOOB、JOOOOOOB

  [A-Z]\{3\},精确匹配3个大写英文字母,如 SHE。

2.2、拓展的正则表达式

  拓展正则表达式元字符及意义:

符号

含义

匹配0个或1个在其之前的那个普通字符

+

匹配1个或多个在其之前的那个普通字符

()

表示一个字符集合或用在expr中

|

表示"或",匹配一组可选的字符

2.2.1、"?"符号

  匹配"?"符号之前的那个字符0次或1次。

  如 JO?B,该表达式表示匹配O字符0此或1次,匹配 JOB 或 JOOB。

  注意:"?"符号至多可匹配1个字符。

2.2.2、"+"符号

  匹配前面字符多次,与"*"不同的是,"*"符号可以匹配0次,而"+"符号至少匹配1次。

  如 S+EU,表示匹配 S 1次或任意次,SSEU、SSSSSSEU,但SEU不能有S+EU匹配,但可以被 S*EU匹配。

2.2.3、"()"符号和"|"符号

  "()"符号通常与"|"符号结合使用,表示一组可选字符的集合。

  如 re(a|e|o)d,该表达式(a|e|o)表示在字符a、e、o中选择任意一个字符,即read、reed、reod都可由该表达式匹配。

  "()"符号可以被"[]"符号替代,re(a|e|o)d 等价于 re[aeo]d。

2.3、通配

  通配是把一个包含通配符的非具体文件名拓展存储在计算机、服务器或者网络上的一批具体文件名的过程。

  最常用的通配符包括正则表达式元字符:?、*、[]、^等。这些元字符在通配中的意义与正则表达式中的意义不完全一致,*符号不再表示器前面字符的重复,而是表示任意位的任意字符,?字符表示一个任意字符,^符号在通配中不代表行首,而是代表取反。

  ls命令用于列出目录下的而文件,ls -l 表示列出文件的详细信息,ll命令等价于ls -l命令。

  /home/shell/script/fundation目录下的所有文件,如下:

  0

  匹配所有 .txt 结尾的文件:

  0

  匹配所有 shell0开头、后面跟1个字符且以.sh为后缀的文件:

  0

  匹配所有 a ~ n 范围内字母开头、且后缀为.sh的文件:

  0

  通配的结果是由计算机搜索大量的文件或目录进行匹配而输出,通配对处理能力和内存资源有很高的需求。

3、grep命令

  GREP是 Global search Regular Expression and Print out the line,即全面搜索正则表达式并把行打印出来。GREP是一种强大的文本搜索工具,它能使用正则表达式搜索文件,并把匹配的行打印出来。

3.1、grep命令的基本用法

  grep命令是支持正则表达式的一个多用途文本搜索工具,grep的一般格式为:

  grep [option] [mode] [file...]

  grep命令由选项、模式、文件三部分组成,在一个或多个文件中搜索满足模式的文本行,模板后的所有字符串被看做文件名,文件名可以有多个,搜索的结果被打印到屏幕,不影响原文件的内容。

  grep命令选项及含义:

option 含义
-c 只输出匹配行的数量
-i 搜索时忽略大小写
-h 查询多文件时不显示文件名
-l 只列出符合匹配的文件名,而不列出具体的匹配行
-n 列出所有的匹配行,并显示行号
-s 不显示不存在或无匹配文本的错误消息
-v 显示不包含匹配文件的所有行
-w 匹配整词
-x 匹配整行
-r 递归搜索,不仅搜索当前工作目录,而且搜索子目录
-q 禁止输出任何结果,以退出状态表示搜索是否成功
-b 打印匹配行距文件头部的偏移量,以字节为单位
-o 与-b结合使用,打印匹配的词距文件头的偏移量,以字节为单位
-E 支持拓展的正则表达式
-F 不支持正则表达式,按照字符串的字面意思进行匹配

  grep命令的模式可以是字符串,也可以是变量,还可以是正则表达式。无论何种模式,只要模式中包含空格,就需要使用双引号将模式引起来,不加双引号,空格后的单词会被误认为是文件名。

  在for04.sh文件中,搜索 for 字符:

  0

  grep支持多文件查看:

  0

  grep指定多个文件时可使用通配:

  0

  -c选项,输出匹配字符串行的数量,默认情况下,grep命令打印出包含模式的所有行,一旦加上 -c 选线能够,就只显示包含模式行的数量。

  0

  -n选项,列出所有的匹配行,默认情况下,grep搜索单个文件时,只显示每行的内容,搜索多个文件时,显示文件名及每行的内容,加上-n选项后,将在行内容前附件显示行号。

  0

  -v选项,不包含模式的所有行:

  0

  for0*.sh文件中有4行不包含 for 字符串。

  -i选项,grep命令对大小写敏感,加上-i选项表示grep命令不区分大小写。

  0

  -h选项,查询多文件时不显示文件名,默认情况下,grep命令查询多个文件时,在匹配行之前显示文件名,加上 -h 选项后,grep命令将不再显示文件名。

  0

  -l选项,只列出符合匹配的文件名,而不列出具体匹配行:

  0

  -s选项,不显示不存在或无匹配文本的错误信息,默认情况下,grep在待搜索文件不存在或搜索不到符合模式的文本行时将打印错误信息。

  0

3.2、grep和正则表达式结合使用

3.2.1、搜索文件的空白行

  0

3.2.2、设置大小写

  利用-i符号可以使grep命令不区分大小写,也可利用 [] 符号设置大小写。

  0

 

标签:字符,Shell,grep,符号,正则表达式,文件,匹配
From: https://www.cnblogs.com/RunningSnails/p/17760347.html

相关文章

  • 使用正则表达式验证用户名和密码
    学习Java开发mis系统一开始总的有个页面来登录吧,可以输入用户名和密码,用到使用正则表达式验证用户名和密码。马上安排!<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html><head><metahttp-equiv="Content-Type&......
  • PowerShell IDE - PowerShellPlus(1)- Getting Started功能介绍
    我们对PowerShellIDE之PowerShellPlus的总体印象已经有了,如下图:从本篇开始,我们对该IDE为我们提供的一些快捷Function和Script进行了解和掌握,从而促进我们更好的学习和掌握PowerShell的Cmdlet和Function。从图中我们可以看到GettingStarted分为6大部分(我的电脑、我的桌面、我的硬......
  • jmeter 提取一个或多个响应值保存到csv文件中,用beanshell实现脚本
    importorg.json.JSONObject;//写入文件//本地存储文件路径FileWriterfs=newFileWriter("D:/apache-jmeter-5.1.1/bin/token.csv",true);BufferedWriterout=newBufferedWriter(fs);//提取出来的token,并通过,换列out.write("${sessionStr}");out.write(",");ou......
  • 正则表达式
     ......
  • JavaScript之正则表达式
    正则表达式(RegExp)正则表达式不是JS独有的内容,大部分语言都支持正则表达式JS中正则表达式使用得不是那么多,我们可以尽量避免使用正则表达式在JS中,正则表达式就是RegExp对象,RegExp对象用于将文本与一个模式匹配正则表达式(regularexpressions,规则表达式)正则表达式用来定......
  • shell数组
    数组数组定义name=(value0value1value2...)name=($(生成列表的命令))echo"${name[0]}"#输出下标为0的元素ps:数组下标从0开始1)对数组元素进行遍历foriin${name[@]}doecho$idone#在数组中@与*等同2)输出元素的下标echo${!name[@]}3)查看最后一个元......
  • Jmeter - 参数关联(正则表达式)
     前言:工具久没用是真的会生疏,补补笔记加深记忆. 一、什么时候需要关联?1. 服务器返回的动态变化而且对业务有影响的需要关联。2. 回放脚本看是否正确,检查下脚本,是否有动态数据影响3.一大串字符串,每次请求参数是否有变化4. 可以找开发问问,接口是开发做的,最清楚了 ......
  • 在shell脚本的解析简单的json封装数据
    !/bin/bash执行curl请求并保存结果response=$(curl-shttp://10.190.107.156:8090/odsDown/rySyncUsserAndDept)response的json格式=使用awk解析数据并获取code字段的值code=$(echo$response|awk-F'"code":''{print$2}'|awk-F'[,}]''{pri......
  • 04-Shell字符串变量
    1.字符串变量的三种方式字符串(String)就是一系列字符的组合。字符串是Shell编程中最常用的数据类型之一(除了数字和字符串,也没有其他类型了)单引号方式双引号方式,推荐不用引号方式var='abc'var2="abc"var3=abc1.1三种格式的区别使用单引号''的字符串:任......
  • 03-Shell环境变量深入
    1.自定义系统环境变量1.1全局配置文件/etc/profile应用场景当前用户进入Shell环境初始化的时候会加载全局配置文件/etc/profile里面的环境变量,供给所有Shell程序使用以后只要是所有Shell程序或命令使用的变量,就可以定义在这个文件中1.2案例/etc/profile定义存储自定义......