精华内容
下载资源
问答
  • Shell正则

    2020-03-12 15:40:12
    1.Shell正则表达式 ​ Linux中常用的有两种正则表达式引擎:基础正则表达式BRE、扩展正则表达式ERE。 正则表达式也译为正规表示法、常规表示法,是一种字符模式,用于再查找过程中匹配指定的字符。 ​ 支持正则...

    1.Shell正则表达式

    ​ Linux中常用的有两种正则表达式引擎:基础正则表达式BRE、扩展正则表达式ERE。

    	正则表达式也译为正规表示法、常规表示法,是一种字符模式,用于再查找过程中匹配指定的字符。
    

    ​ 支持正则表达式的程序:locate | find | vim | grep | sed | awk

    1.1 基础正则表达式

    字符 描述
    . 匹配除换行符\n之外的任何单个字符
    * 匹配前面的子表达式零次或多次
    .* 匹配任意长度字符
    ^ 匹配输入字符串的开始位置(行首)
    $ 匹配输入字符串的结尾位置(行尾)
    ^$ 空行
    [] 匹配包含在方括号里的任意一个字符或一组单个字符
    [^] 匹配不包含在方括号里任意一个字符或一组单个字符
    < 匹配单词开头的位置
    > 匹配单词词尾的位置
    < > 精确匹配
    {n} 匹配前面的字符连续出现n次
    {n,} 匹配前面的字符至少出现n次
    {n,m} 匹配前面的字符至少出现n次与m次之间
    ( ) 保存被匹配的字符
    \d 匹配数字[0-9]。(grep -P)
    \w 匹配字母数字下划线[a-zA-Z0-9_]。(grep -P)
    \s 匹配空格、制表符、换行符[\t\r\n]。(grep -P)

    1.2 扩展正则表达式

    ​ grep需使用参数-E或使用egrep,sed需使用参数-r。

    扩展正则表达式 说明
    + 匹配前面的子表达式一次或多次
    匹配前面的子表达式零次或一次,或指明一个非贪婪限定符
    | 指明两项之间的一个选择(或)
    () 标记一个子表达式的开始和结束位置。
    {n} 匹配前面的字符连续n次
    {n,} 匹配前面的字符至少n次
    {n,m} 匹配前面的字符n到m次

    1.3 第二类正则表达式

    表达式 说明
    [:alnum:] 字符与数字字符
    [:alpha:] 字母字符(包括大小写字母)
    [:blank:] 空格与制表符
    [:digit:] 数字
    [:lower:] 小写字母
    [:upper:] 大写字母
    [:punct:] 标点符号
    [:space:] 包括换行符,回车等在内的所有空白
    展开全文
  • shell正则表达式.zip

    2020-01-15 17:53:25
    shell正则表达式,linux,个别常见的shell正则表达式,linux,个别常见的shell正则表达式,linux,个别常见的
  • 正则表达式是一种表示方式,可以让你查找匹配特定的准则的文本,例如以字母a开头的文件,学好正则表达式将使以后的文本处理变得方便,快速,本文给大家介绍shell正则表达式学习笔记,对shell正则表达式相关知识感...
  • shell正则

    2019-03-11 20:13:37
  • 主要介绍了shell 正则表达式整理的相关资料,需要的朋友可以参考下
  • 主要介绍了Shell正则表达式验证IP地址,本文给出了多个方法,并分别给出实现代码,需要的朋友可以参考下
  • Shell正则表达式

    千次阅读 2019-08-12 17:51:20
    正则表达式是一种定义的,用于描述字符排列和匹配模式的一种语法规则,linux系统中的文本处理工具可以借助shell正则表达式处理文本文档。使用正则表达式可以帮助我们快速获取需要的信息,是我们的工作更加简单、方便...

    一、shell正则表达式的概述:

          正则表达式是一种定义的,用于描述字符排列和匹配模式的一种语法规则,linux系统中的文本处理工具可以借助shell正则表达式处理文本文档。使用正则表达式可以帮助我们快速获取需要的信息,是我们的工作更加简单、方便。

    二、BRE和ERE的区别

    基本正则表达式(BRE)和扩展正则表达式(ERE)的区别仅仅是元字符(meta charactor)的区别而已。
    BRE: 只有^$.*[]是元字符
    ERE: ^$.[]*+(){}?|都是元字符

    具体的可以百度一下查看,本文主要内容不是这个。。。

    三、shell正则表达式的分类:

    • 字符类
    • 数量限定符
    • 位置限定符

    字符类:

    元字符 功能 举例
    . 匹配除了换行符之外的任意一个字符 #egrep a.b 文件名;表示匹配文件中a跟b之间有一个任意字符的行;
    - 在括号中使用,表示匹配的字符的范围 [0-9]表示的就是从数字0到数字9这个范围的数字;
    [ ] 匹配括号中的任意一个字符 #egrep [0-9] 文件名;表示匹配文件中含有0-9任意一个数字的行;
    [[:xxx:]] grep工具预定义的一些命名字符 [[:digit:]]表示匹配一个数字[0-9],[[:alpha:]表示匹配一个英文字母[a-Z]

    数量限定符:

    元字符 功能 举例
    ? 紧跟在它前面的单元应匹配零次或者一次 ,是通配符的一种,等价于(0,1)
    + 紧跟在它前面的单元应匹配一次或者多次(至少一次),等价于(1,)
    * 紧跟在它前面的单元匹配零次或者多次,是通配符的一种 “a”:表示匹配所有内容,包括空行;“aa”:表示匹配至少含有一个a的行;“aaa”:表示匹配至少含有两个a的行;
    {n} 紧跟在它前面的单元应匹配n次 [0-9]{4}:表示匹配4位数字;
    {n,} 紧跟在它前面的单元应匹配至少n次 [0-9]{3,}:表示匹配至少匹配3位数字;
    {,m} 紧跟在它前面的单元应匹配最多m次 [0-9]{,2}:表示匹配数字最多2位
    {n,m} 紧跟在它前面的单元应匹配至少n次,最多m次 [0-9]{1,3}:表示匹配数字至少1位,最多3位;

    位置限定符:

    元字符 功能 举例
    ^ 匹配行首的位置;a.位于[ ]括号内,则匹配除括号中字符之外的任意字符,也就是对[ ]括号内的字符取反;b.位于[ ]括号外面,则表示以[ ]中的任意一个字符开头 ^a:表示匹配文件中以a开头的行;[ ^0-9]:表示匹配任意一位非数字字符;
    $ 匹配行尾的位置 “a$”:表示匹配以a结尾的行;

    其他特殊字符:

    元字符 功能 举例
    \ 转义符,可以将普通字符转为特殊字符,将特殊字符转为普通字符,大多时候是用在将特殊字符的含义取消 ".$“如果前面没有加转义符,则表示匹配以任意一个字符结尾的行,加上转义字符之后表示匹配以”."结尾的行,也就是把“.“的特殊含义取消了,变成普通的”.”符号;
    () 小括号可以将正则表达式的一部分括起来组成一个单元(也就是一个组),可以对整个单元使用数量限定符 ([a-z]-[0-9]){1,3}:表示匹配”字母-数字“这样的格式的组合三次
    | 连接两个子表达式,表示或的关系 a|b表示a或者b;

    表示集合的字符类描述:

    字符 描述
    [:alnum:] 表示所有字母数字的集合,[a-z A-Z 0-9]
    [:alpha:] 表示所有字母的集合,[a-z A-Z]
    [:digit:] 表示所有数字,[0-9]
    [:lower:] 表示所有的小写字母的集合,小写[a-z]
    [:upper:] 表示所有大写字母的集合,大写[A-Z]
    [:space:] 表示空格
    [:blank:] 表示所有空格或者制表键(tab键)的集合
    [:punct:] 表示所有的标点字符
    [:cntrl:] 表示所有的控制字符
    [:print:] 表示所有的非控制字符
    [:graph:] 表示所有可视,可打印的字符(不包含空格)
    [:xdigit:] 表示所有十六进制的数字的集合,[0-9 a-f A-F]

    尽量使用表示集合类的字符是很有利的,因为它们可以使我们的脚本更加简洁,美观;

    四、正则表达式优先级

    正则表达式与算术表达式类似,遵循优先级顺序,相同优先级的从左到右进行运算,不同优先级的运算先高后低。下表从高到低说明了各种正则表达式运算符的优先级顺序,同行表示同级:

    运算符 描述
    \ 转义符
    (),(?:),(?=),[] 圆括号和方括号
    *, +, ?, {n}, {n,}, {n,m} 限定符
    ^, $, \任何元字符、任何字符 定位点和序列(即:位置和顺序)
    | “或"操作,字符具有高于替换运算符的优先级,所以”s|get“匹配"s"或"get”。若要匹配"set"或"get",需要使用括号创建子表达式,例:"(s|g)et"

    五、shell正则表达式的应用实例:

    原文件内容:
    在这里插入图片描述
    注:grep的常用选项:

    -E:使grep支持扩展正则表达式,扩展选项为正则表达式,grep -E相当于egrep
    -n:显示匹配的行的行号
    -q:安静模式,也就是静默输出,不打印任何标准输出,如果有匹配的内容则立即返回状态值0
    -v:取反
    -w:用于精确匹配
    -R:搜索子目录
    -i:不区分大小写针对单个字符
    -o:只打印匹配到的字符
    -c:显示有多少行被匹配到

    一、基本应用实例

    1.过滤出a后面跟有任意一个字符的行:
    在这里插入图片描述
    2.过滤出a后面跟有任意多个a(包括0个)的行:
    在这里插入图片描述
    3.过滤出至少出现一次a的行:
    在这里插入图片描述
    4.过滤出a后面跟有0个a或者1个a的行:
    在这里插入图片描述
    5.找出a后面跟有2个a的行:
    在这里插入图片描述
    6.找出a后面跟有最少一个a,最多两个a的行:
    在这里插入图片描述
    7.找出行首为aa的行:
    在这里插入图片描述
    8.匹配文件中所有非数字的字符(红色的为非数字字符):
    在这里插入图片描述
    9.找出行尾为11的行:
    在这里插入图片描述

    二、综合应用实例
    1.找出文件中的所有ip地址:
    参考方法:

    第一种方法:
    在这里插入图片描述
    参考解释:[0-9]表示从0-9的数字中取一个数字,{1,3}表示[0-9]要匹配出最少一个数字,最多三个数字,在”.”的前面加上转义符”\“可以使特殊符号”.“成为普通的”.“符号,也就是上图要找的格式为ip地址,^表示以这个格式开头,$表示以这个格式结尾,也就是表示一行只有一个ip才会匹配出来;

    第二种方法:
    在这里插入图片描述
    **参考解释:**跟第一种方法唯一不同的地方就是用()将”[0-9]{1,3}.“括起来组成一个单元,然后再用数量限定符给他们指定匹配的次数,“([0-9]{1,3}.){1,3}”与”[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.“效果等同

    第三种方法:
    在这里插入图片描述
    **参考解释:**第一种方法跟第三种方法唯一不同的是第三种方法用的是数字的集合匹配,[:digit:]相当于[0-9],其他的是一样的;

    第四种方法:
    在这里插入图片描述
    **参考解释:**第四种方法跟第二种方法唯一不同的是第四种方法使用的是数字集合的匹配,其余的一样;

    以上的四种方法都可以将”grep -En“改为”egrep -n“去执行

    2.显示ifconfig命令结果中的ip地址,以eth0网卡为例:
    在这里插入图片描述
    也可以这样:
    在这里插入图片描述
    **参考解释:**用ifconfig命令输出eth0网卡信息,管道给grep工具处理精确匹配出含有”inet“的行,得到的结果管道给egrep处理匹配出含有ip地址的行,然后再管道给head命令输出第一行;

    3.写一个简单的脚本,输入当前的日期,然后判断输入的格式是否正确:

    [root@ceshi ~]vim time.sh
    #!/bin/bash
    read -p "请输入今天的日期,格式为”xxxx-xx-xx:" time
    ##判断参数
    if [ -z ${time} ];then
    	echo "请您重新运行脚本,并且输入时间,格式为"xxxx-xx-xx"
    	exit 1
    fi
    
    if [ -n ${time} ];then
    	echo ${time} | egrep -q [[:alpha:]]
    	if [ $? -eq 0 ];then
    		echo "您输入的信息中包含英文字母,请您重新运行脚本,并且输入纯数字格式的日期"
    		exit 2
    	else
    		echo ${time} | egrep -q [[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}
    		if [ $? -eq 0 ];then
    			echo "输入日期格式CORRECT"
    		else
    			echo "输入日期格式FAIL"
    		fi
    	fi
    fi
    
    匹配非负整数(正整数 + 0): “^\d+$”
    匹配正整数: “^[0-9]*[1-9][0-9]*$” 
    匹配非正整数(负整数 + 0): “^((-\d+)|(0+))$”
    匹配负整数: “^-[0-9]*[1-9][0-9]*$” 
    匹配整数: “^-?\d+$” 
    匹配非负浮点数(正浮点数 + 0): “^\d+(\.\d+)?$”
    匹配正浮点数: “^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$”
    匹配非正浮点数(负浮点数 + 0): “^((-\d+(\.\d+)?)|(0+(\.0+)?))$”
    匹配负浮点数: “^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$” 
    匹配浮点数: “^(-?\d+)(\.\d+)?$” 
    匹配由26个英文字母组成的字符串: “^[A-Za-z]+$”
    匹配由26个英文字母的大写组成的字符串: “^[A-Z]+$”
    匹配由26个英文字母的小写组成的字符串: “^[a-z]+$”
    匹配由数字和26个英文字母组成的字符串: “^[A-Za-z0-9]+$”
    匹配由数字、26个英文字母或者下划线组成的字符串: “^\w+$”
    匹配邮件地址: “^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$”
    匹配url: “^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$”
    匹配年-月-日: /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/
    匹配月/日/年: /^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/
    匹配Emil: “^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$” 
    匹配电话号码: /^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$/
    匹配中文字符的正则表达式: [\u4e00-\u9fa5] 
    匹配双字节字符(包括汉字在内)[^\x00-\xff] 
    匹配空行的正则表达式:\n[\s| ]*\r 
    匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/ 
    匹配首尾空格的正则表达式:(^\s*)|(\s*$) 
    匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 
    匹配网址URL的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$ 
    匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 
    匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})? 
    匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$ 
    
    展开全文
  • shell 正则表达式

    2021-01-06 19:14:57
    Shell 正则表达式 正则表达式的概念:正则表达式(或称Regular Expression,简称RE),是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的分割,匹配、査找及替换操作。即正则表达式是一种文本模式,该...

    Shell 正则表达式

    正则表达式的概念:正则表达式(或称Regular Expression,简称RE),是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的分割,匹配、査找及替换操作。即正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。

    在正则表达式中,我们把用于匹配的特殊符号又称作元字符。在shell中,元字 符又分为基础元字符(BRE)和扩展元字符(ERE)。
    在这里插入图片描述
    在这里插入图片描述
    注:"+"、"?"、"|"、"()"、"{}“等扩展元字符egrep命令或grep -E是支持的。grep命令在不加-E选项的情况下可以按如下格式写:”+"、"?"、"|"、"()"、"{}"
    1、* :前一个字符匹配0次或任意多次
    注意,"* 和通配符中的 "* 含义不同,它代表前一个字符重复 0 次或任意多次。比如,"a*“并不是匹配"a"后面的任意字符,而是可以匹配所有内容,包括空白行。
    “a*“代表匹配 0 个 a 或无数个 a,如果是匹配 0 个 a,也就是每个字符都会匹配,所以会匹配所有内容,包括空白行。所以"a*“这样的正则表达式是没有任何意义的。
    如果这样写正则表达式"aa*”,则代表这行字符串一定要有一个 a,但是后面有没有 a 都可以。也就是说,会匹配至少包含一个 a 的行。
    注:* 修饰的它前面的一个字符a,而不是字符串aa
    如果正则表达式是"aaa*”,则会匹配最少包含两个连续 a 的字符串。
    2、 “.”:匹配除换行符和回车符外的任意一个字符
    正则表达式”.“只能匹配一个字符,这个字符可以是任意字符。
    “^”:匹配行首,” $ “:匹配行尾
    “^ $ “则会匹配空白行。
    如果不加”-n"选项,空白行是没有任何显示的;加入了”-n"能看到空白行的行号。
    3、”[ ]“会匹配中括号中指定的任意一个字符,注意只能匹配一个字符。比如 [ao] 要么匹配 a 字符,要么匹配一个 o 字符。
    4、\ :转义符
    转义符会取消特殊符号的含义。如果想要匹配使用”.“结尾的行,那么正则表达式是 $ 是不行的,因为”.“在正则表达式中有特殊含义,代表任意一个字符。所以需要在前面加入转义符,如” \ $”。
    5、\ {n}:表示其前面的字符出现 n 次
    \ {n}中的 n 代表数字,这个正则表达式会匹配前一个字符出现 n 次的字符串。

    展开全文
  • Shell 正则表达式

    2019-04-18 19:41:47
    Shell 正则表达式 什么是正则表达式 正则表达式(regular expression,RE)是一种字符模式,用来在查找过程中匹配指定字符。 在大多数程序里,正则表达式被置于两个正斜杠之间。 匹配数字:^[0-9]+$ ⇒\Rightarrow...
  • shell正则表达式

    2020-07-25 12:44:31
    本文转载自:shell正则表达式 对于常用的正则表达式做一个记录。 正则表达式的概念及特点 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符及这些特定字符的组合,组成一个“规则字符串”,...
  • 主要介绍了Shell正则表达式之grep、sed、awk实操笔记,本文使用grep、sed、awk配合正则达到了一些需求和目的,需要的朋友可以参考下
  • shell正则表达式.txt

    2012-12-13 12:45:28
    shell正则表达式.txt
  • 正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。本文介绍了UNIX和Linux Shell正则表达式的语法。
  • Linux_Shell正则表达式语法doc版
  • linux系统shell正则表达式-练习工具和教材 正则表达式-练习工具和教材 正则表达式-练习工具和教材
  • 一个正则表达式就是由普通字符以及特殊字符组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所...本文介绍了UNIX和LINUX系统的SHELL正则表达式语法。
  • Shell 正则表达式 详解

    2021-01-20 12:48:58
    一、什么是正则表达式 正则表达式是用于描述字符排列和匹配模式的一种语法规则。 二、基本正则表达式语法 正则表达式主要用于字符串的模式分割、匹配、查找及替换操作,下面来关注一下正则表达式基本的元字符和它的...
  • Linux_Shell正则表达式语法介绍
  • shell正则表达式 1、shell函数 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用. 格式: funname () { CMD #函数体 } 例子: #!/bin/bash fun () { echo "hello world" } fun ... ╭─...
  • shell正则表达式 目录shell正则表达式常用匹配一、什么是正则表达式?二、元字符三、基本正则表达式元字符四、扩展正则表达式元字符 常用匹配 1、匹配数字: 1+$ 2、匹配Mail:[a-z0-9_]+@[a-z0-9]+.[a-z]+ 3、匹配...
  • Shell正则表达式 Shell语言是一种脚本语言。也有其他脚本语言也有正则表达式,如python,Perl,Tcl等。 一、正则表达式 正则表达式 正则表达式是一种用于描述字符排列和匹配模式的一种语法规则,linux系统中的文本...
  • 文章目录shell 正则表达式提取文件名,目录名,后缀获取目录 shell 正则表达式 #:表示从左边算起第一个 %:表示从右边算起第一个 ##:表示从左边算起最后一个 %%:表示从右边算起最后一个 换句话来说,#总是表示...
  • Shell正则表达式及实例

    千次阅读 2018-12-14 22:10:16
    一、Shell 正则表达式 基础正则表达式:BRE 扩展正则表达式:ERE,扩展的表达式有+,?,|,(),grep选项-E . 匹配除换行符之外的任意单个字符 注意是单个字符,比如匹配1234,就应当是1…4,中间是两个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 103,221
精华内容 41,288
关键字:

shell正则