shell正则_shell正则表达式 - CSDN
精华内容
参与话题
  • shell中的正则表达式

    万次阅读 2020-07-30 16:25:10
     生活中处处都是正则: 比如我们描述:4条腿 你可能会想到的是四条腿的动物或者桌子,椅子等 继续描述:4条腿,活的 就只剩下四条腿的动物这一类了在linux中,通配符是由shell解释的,而正则表达式则是由命令...

    一 什么是正则

    正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。
      生活中处处都是正则:
      比如我们描述:4条腿
      你可能会想到的是四条腿的动物或者桌子,椅子等
      继续描述:4条腿,活的
      就只剩下四条腿的动物这一类了

    在linux中,通配符是由shell解释的,而正则表达式则是由命令解释的,下面我们就为大家介绍grep文本处理命令,它也可以解释正则。

    二 grep

    参数

    -n  :显示行号
    -o  :只显示匹配的内容
    -q  :静默模式,没有任何输出,得用$?来判断执行成功没有,即有没有过滤到想要的内容

    -l  :如果匹配成功,则只将文件名打印出来,失败则不打印,通常-rl一起用,grep -rl 'root' /etc 
    -A  :如果匹配成功,则将匹配行及其后n行一起打印出来
    -B  :如果匹配成功,则将匹配行及其前n行一起打印出来
    -C  :如果匹配成功,则将匹配行及其前后n行一起打印出来
    --color
    -c  :如果匹配成功,则将匹配到的行数打印出来
    -E  :等于egrep,扩展
    -i  :忽略大小写

    -v  :取反,不匹配
    -w:匹配单词,单词的意思是特殊符号隔开的英文字母组合,对象中的正则表达式都会当成单词(前后有特殊符号)。

    复制代码
    [root@MiWiFi-R3-srv ~]# cat a.txt root123ROot asdfRoot_123rOOtssroot 123[root@MiWiFi-R3-srv ~]# grep -i "root" a.txt root123ROot asdfRoot_123rOOtssroot 123[root@MiWiFi-R3-srv ~]# grep -w "root" a.txt root 123
    复制代码

     

    三 grep种类
    grep   全面搜索正则表达式并把行打印出来
    fgrep   它搜索字符串而不是搜索匹配表达式的模式。fgrep 命令使用快速的压缩算法。$, *, [, |, (, )\等字符串被 fgrep 命令按字面意思解释。这些字符并不解释为正则表达式
    pgrep   以名称为依据从运行进程队列中查找进程,并显示查找到的进程id。
    egrep   用于在文件内查找指定的字符串。egrep执行效果与grep -E相似,使用的语法及参数可参照grep指令,与grep的不同点在于解读字符串的方法。

     

    四 正则介绍

     

    正则表达式

    描述

    示例

    Basic RegEx

    Extended RegEx

    Python RegEx

    Perl regEx

    \

    转义符,将特殊字符进行转义,忽略其特殊意义

    a\.b匹配a.b,但不能匹配ajb,.被转义为特殊意义

    \

    \

    \

    \

    ^

    匹配行首,awk中,^则是匹配字符串的开始

    ^tux匹配以tux开头的行

    ^

    ^

    ^

    ^

    $

    匹配行尾,awk中,$则是匹配字符串的结尾

    tux$匹配以tux结尾的行

    $

    $

    $

    $

    .

    匹配除换行符\n之外的任意单个字符,awk则中可以

    ab.匹配abc或bad,不可匹配abcd或abde,只能匹配单字符

    .

    .

    .

    .

    []

    匹配包含在[字符]之中的任意一个字符

    coo[kl]可以匹配cook或cool

    []

    []

    []

    []

    [^]

    匹配[^字符]之外的任意一个字符(不匹配字符组内的每个字符)

    123[^45]不可以匹配1234或1235,1236、1237都可以

    [^]

    [^]

    [^]

    [^]

    [-]

    匹配[]中指定范围内的任意一个字符,要写成递增

    [0-9]可以匹配1、2或3等其中任意一个数字

    [-]

    [-]

    [-]

    [-]

    ?

    匹配之前的项1次或者0次

    colou?r可以匹配color或者colour,不能匹配colouur

    不支持

    ?

    ?

    ?

    +

    匹配之前的项1次或者多次

    sa-6+匹配sa-6、sa-666,不能匹配sa-

    不支持

    +

    +

    +

    *

    匹配之前的项0次或者多次

    co*l匹配cl、col、cool、coool等

    *

    *

    *

    *

    ()

    匹配表达式,创建一个用于匹配的子串

    ma(tri)?匹配max或maxtrix

    不支持

    ()

    ()

    ()

    {n}

    匹配之前的项n次,n是可以为0的正整数

    [0-9]{3}匹配任意一个三位数,可以扩展为[0-9][0-9][0-9]

    不支持

    {n}

    {n}

    {n}

    {n,}

    之前的项至少需要匹配n次

    [0-9]{2,}匹配任意一个两位数或更多位数

    不支持

    {n,}

    {n,}

    {n,}

    {n,m}

    指定之前的项至少匹配n次,最多匹配m次,n<=m

    [0-9]{2,5}匹配从两位数到五位数之间的任意一个数字

    不支持

    {n,m}

    {n,m}

    {n,m}

    |

    交替匹配|两边的任意一项

    ab(c|d)匹配abc或abd

    不支持

    |

    |

    |

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    应用举例:

    .* 所有字符

    ^[^] 非字符组内的字符开头的行

    [a-z] 小写字母

    [A-Z] 大写字母

    [a-Z] 小写和大写字母

    [0-9] 数字

    \< 单词头 单词一般以空格或特殊字符做分隔,连续的字符串被当做单词

    \> 单词尾

     

    扩展正则 sed 加 -r 参数 或转义

    grep 加 -E 或 egrep 或转义

     

    sed -n '/roo\?/p' /etc/passwd 

    sed -rn '/roo?/p' /etc/passwd

    abc|def abc或def

    a(bc|de)f abcf 或 adef

    x\{m\} x出现m次

    x\{m,\} x出现m次至多次(至少m次)

    x\{m,n\} x出现m次至n次

     

    posix定义的字符分类

     

    [:alnum:] Alphanumeric characters.

    匹配范围为 [a-zA-Z0-9]

    [:alpha:] Alphabetic characters.

    匹配范围为 [a-zA-Z]

    [:blank:] Space or tab characters.

    匹配范围为 空格和TAB键

    [:cntrl:] Control characters.

    匹配控制键 例如 ^M 要按 ctrl+v 再按回车 才能输出

    [:digit:] Numeric characters.

    匹配所有数字 [0-9]

    [:graph:] Characters that are both printable and visible. (A space is print-

    able, but not visible, while an a is both.)

    匹配所有可见字符 但不包含空格和TAB 就是你在文本文档中按键盘上能用眼睛观察到的所有符号

    [:lower:] Lower-case alphabetic characters.

    小写 [a-z]

    [:print:] Printable characters (characters that are not control characters.)

    匹配所有可见字符 包括空格和TAB

    能打印到纸上的所有符号

    [:punct:] Punctuation characters (characters that are not letter, digits, con-

    trol characters, or space characters).

    特殊输入符号 +-=)(*&^%$#@!~`|\"'{}[]:;?/>.<,

    注意它不包含空格和TAB

    这个集合不等于^[a-zA-Z0-9]

    [:space:] Space characters (such as space, tab, and formfeed, to name a few).

     

    [:upper:] Upper-case alphabetic characters.

    大写 [A-Z]

    [:xdigit:] Characters that are hexadecimal digits.

    16进制数 [0-f]

     

    使用方法:

     

    [root@seker ~]# grep --color '[[:alnum:]]' /etc/passwd

     

     

    定义变量名的边界

    [root@MiWiFi-R3-srv ~]# rest_mem=20[root@MiWiFi-R3-srv ~]# echo ${rest_mem}%20%

     

    五 运算符

    算术运算符:+、-、*、/、%

    [root@MiWiFi-R3-srv ~]# echo $[3+1]4

     

    关系操作:与(())连用

    <    >     <=     >=     ==     !=     &&     ||

    test命令相关,[]可以达到一样的效果[root@MiWiFi-R3-srv ~]# x=1[root@MiWiFi-R3-srv ~]# [ $x -gt 1 ][root@MiWiFi-R3-srv ~]# echo $?0

     

    赋值运算符

    =     +=     *=     /=     %=

    复制代码
    [root@MiWiFi-R3-srv ~]# x=10[root@MiWiFi-R3-srv ~]# ((x%3))[root@MiWiFi-R3-srv ~]# echo $x10[root@MiWiFi-R3-srv ~]# [root@MiWiFi-R3-srv ~]# ((x%=3))[root@MiWiFi-R3-srv ~]# echo $x1
    复制代码

     

    shell里的所有计算器
    $[] (()) $(()) expr bc bc -l

    浮点运算:yum install bc -y

    [root@MiWiFi-R3-srv ~]# echo 'scale=2;1/3'|bc -l.33

     

    测试操作

    命令执行后会返回到一个系统变量中 $?
    如果$?值为0 表示命令执行成功 否则为失败

    测试命令 test [ ] [[ ]] (( ))
    打开man test 逐一介绍每个参数

    复制代码
    测试文件状态-d 目录-s 文件长度 > 0、非空-f 正规文件-w 可写-r 可读-x 可执行-L 符号连接-u 文件有 suid 位设置
    复制代码

    字符串测试

    复制代码
    = 两个字符串相等!= 两个字符串不相等-z 空串-n 非空串[root@MiWiFi-R3-srv ~]# var1='abc'[root@MiWiFi-R3-srv ~]# var2='123'[root@MiWiFi-R3-srv ~]# [ $var1 == $var2 ][root@MiWiFi-R3-srv ~]# echo $?1
    复制代码

     

    测试数值

    复制代码
    -eq 等于-ne 不等于-gt 大于-lt 小于-ge 大于等于-le 小于等于[root@MiWiFi-R3-srv ~]# [ 10000 -gt 250 ] #不要使用大于号小于号等于号等,要使用man test中规定的,详见下一小节4拓展[root@MiWiFi-R3-srv ~]# echo $?0
    复制代码

    拓展测试符号 [[ ]] (())

    复制代码
    数字测试符号# [ 10 < 2 ] # 语法错误-bash: 2: 没有那个文件或目录# # [[ 2 > 10 ]] # 结果错误# echo $?0# [[ 20 > 10 ]] # 正确# echo $?0# (( 10 < 20 ))# echo $?0字符测试# [ "aa" = "aa" ]# echo $?0# [[ "aa" = "aa" ]]# echo $?0# (( "aa" = "aa" )) #结果错误# echo $?1混合测试# [ a = a -a 10 < 20 ]-bash: 20: 没有那个文件或目录[root@seker ~]# [[ a = a -a 10 < 20 ]]-bash: syntax error in conditional expression-bash: syntax error near `-a'[root@seker ~]# [[ a = a && 10 < 20 ]][root@seker ~]# echo $?0[root@seker ~]# [[ a = a || 10 < 20 ]][root@seker ~]# echo $?0[root@seker ~]# (( a = a || 10 < 20 ))[root@seker ~]# echo $?0[root@seker ~]# (( a = a && 10 < 20 ))[root@seker ~]# echo $?0[root@seker ~]# 结论: 比较数字,使用(( ))其他测试使用 [[ ]]包含数字比较的混合测试,使用[[ expr1 && expr2 ]] (( expr1 || expr2 ))两个文件的比较FILE1 -ef FILE2测试两个文件是否是相同的inode有时为了找到同一个INODE号的文件 更倾向于使用 find 命令的 -inum 或 --samefileFILE1 -nt FILE2FILE1 is newer (modification date) than FILE2FILE1 -ot FILE2FILE1 is older than FILE2
    展开全文
  • Shell正则表达式及练习题

    千次阅读 2018-09-12 14:12:51
    grep 正则表达式练习 grep使用方式  使用方式:grep [OPTIONS] PATTERN [FILE…]  grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]  常用选项:  –color=auto:对匹配到的文本着色后进行高亮显示;  -i...

    grep 正则表达式练习

    grep使用方式
      使用方式:grep [OPTIONS] PATTERN [FILE…]

      grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]

      常用选项:
      –color=auto:对匹配到的文本着色后进行高亮显示;

       -i:忽略字符的大小写

      -o:仅显示匹配到的字符串

      -v:显示不能被模式匹配到的行

      -E:支持使用扩展的正则表达式

      -q:静默模式,即不输出任何信息

      -A #:显示被模式匹配的行及其后#行

      -B #:显示被模式匹配的行及其前#行

      -C #:显示被模式匹配的行及其前后各#行

      注:使用grep匹配时需使用双引号引起来(单引号为强引用),防止被系统误认为参数或者特殊命令而报错。

    扩展grep使用方式
      使用方式:egrep [OPTIONS] PATTERN [FILE…]

      grep -E [OPTIONS] PATTERN [FILE…]

      -i:忽略字符的大小写
      -o:仅显示匹配到的字符串本身
      -v:显示不被模式匹配到的行
      -q:静默模式,即不输出任何信息
      -A #:显示被模式匹配的行及其后#行
      -B #:显示被模式匹配的行及其前#行
      -C #:显示被模式匹配的行及其前后各#行
      -G:支持基本正则表达式

    grep正则表达式元字符
      ‘^‘: 锚定行首

      ‘$’: 锚定行尾

      ‘.‘: 匹配任一一个字符

      ‘*’: 匹配零个或多个先前字符

      ‘\?‘:匹配其前面的字符0次或者1次;

      ‘+’:匹配其前面的字符1次或者多次;

      ‘{m}‘:匹配其前面的字符m次(\为转义字符)

      ‘{m,n}’:匹配其前面的字符至少m次,至多n次

      ‘[]‘: 匹配一个指定范围内的字符 | ‘[^]’匹配指定范围外的任意单个字符

      ‘\<‘或‘\b’:锚定词首,‘>’或‘\b’:锚定词尾(可用\

    Steve Blenheim:238-923-7366:95 Latham Lane, Easton, PA 83755:11/12/56:20300
    Betty Boop:245-836-8357:635 Cutesy Lane, Hollywood, CA 91464:6/23/23:14500
    Igor Chevsky:385-375-8395:3567 Populus Place, Caldwell, NJ 23875:6/18/68:23400
    Norma Corder:397-857-2735:74 Pine Street, Dearborn, MI 23874:3/28/45:245700
    Jennifer Cowan:548-834-2348:583 Laurel Ave., Kingsville, TX 83745:10/1/35:58900
    Jon DeLoach:408-253-3122:123 Park St., San Jose, CA 04086:7/25/53:85100
    Karen Evich:284-758-2857:23 Edgecliff Place, Lincoln, NB 92086:7/25/53:85100
    Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200
    Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200
    Fred Fardbarkle:674-843-1385:20 Parak Lane, DeLuth, MN 23850:4/12/23:780900
    Fred Fardbarkle:674-843-1385:20 Parak Lane, DeLuth, MN 23850:4/12/23:780900
    Lori Gortz:327-832-5728:3465 Mirlo Street, Peabody, MA 34756:10/2/65:35200
    Paco Gutierrez:835-365-1284:454 Easy Street, Decatur, IL 75732:2/28/53:123500
    Ephram Hardy:293-259-5395:235 CarltonLane, Joliet, IL 73858:8/12/20:56700
    James Ikeda:834-938-8376:23445 Aster Ave., Allentown, NJ 83745:12/1/38:45000
    Barbara Kertz:385-573-8326:832 Ponce Drive, Gary, IN 83756:12/1/46:268500
    Lesley Kirstin:408-456-1234:4 Harvard Square, Boston, MA 02133:4/22/62:52600
    William Kopf:846-836-2837:6937 Ware Road, Milton, PA 93756:9/21/46:43500
    Sir Lancelot:837-835-8257:474 Camelot Boulevard, Bath, WY 28356:5/13/69:24500
    Jesse Neal:408-233-8971:45 Rose Terrace, San Francisco, CA 92303:2/3/36:25000
    Zippy Pinhead:834-823-8319:2356 Bizarro Ave., Farmount, IL 84357:1/1/67:89500
    Arthur Putie:923-835-8745:23 Wimp Lane, Kensington, DL 38758:8/31/69:126000
    Popeye Sailor:156-454-3322:945 Bluto Street, Anywhere, USA 29358:3/19/35:22350
    Jose Santiago:385-898-8357:38 Fife Way, Abilene, TX 39673:1/5/58:95600
    Tommy Savage:408-724-0140:1222 Oxbow Court, Sunnyvale, CA 94087:5/19/66:34200
    Yukio Takeshida:387-827-1095:13 Uno Lane, Ashville, NC 23556:7/1/29:57000
    Vinh Tranh:438-910-7449:8235 Maple Street, Wilmington, VM 29085:9/23/63:68900
    1. 显示包含 San的行

      grep "San" datafile
    2. 显示以 J 开头的人名所在的行

          grep "^J" datafile
    3. 显示 700 结尾的行

      grep "700$" datafile
    4. 显示不包 834 的行

      grep -v "834" datafile 
    5. 显示生日 12 月的行

      awk -F"[:/]" '{ print $(NF-3)}' datafile 
    6. 显示电话号码的区号为 834 的行

      grep ":834-" datafile
    7. 显示这样的行 : 它包含一个大写字后跟四个小写字母 , 逗号, 空格, 和一个大写 字母

      egrep "[[:upper:]]{1}[[:lower:]]{4},[[:space:]]{1}[[:upper:]]{1}" datafile
    8. 显示姓以 K或 k 开头的行

      grep -i "^k" datafile   
    9. 显示工资为六位数的行 , 并在前面加行号

      egrep "[0-9]{6}$" datafile 
    10. 显示包括 Lincoln 或 lincoln 的行, 并且 grep 对大小写不敏感

      grep -i "lincoln" datafile
    展开全文
  • shell正则表达式

    千次阅读 2018-07-06 22:57:50
    学习过编程语言的应该都听说过正则表达式这个词,那么正则表达式到底是什么呢?接下来就让我们来了解一下。 1、正则表达式简介 正则表达式是用于描述一组字符串特征的模式,用来匹配特定的字符串。通过特殊字符+...

            学习过编程语言的应该都听说过正则表达式这个词,那么正则表达式到底是什么呢?接下来就让我们来了解一下。

           1、正则表达式简介

             正则表达式是用于描述一组字符串特征的模式,用来匹配特定的字符串。通过特殊字符+普通字符来进行模式描述,从而达到文本匹配目的。

            我们一般使用正则表达式是来进行模糊匹配。

            正则表达式的实验场景有很多,一般我们在浏览网页的时候

    • 验证:表单提交的时候,对用户名和密码的验证;
    • 查找:从海量的数据和信息里面提取指定内容;例如在一批URL中查找指定的URL;
    • 替换:将指定格式的文本,进行正则匹配查找,找到之后进行特定替换;例如在vim编辑器里进行文本替换的时候;

             2、正则表达式的三要素

            构建正则表达式有三个重要的指标,那就是正则表达式的三要素:字符类,数量限定符,位置限定符。当然有时还会有一些特殊符号。

            正则表达式与语言无关。

         3、grep工具的了解

         相信看到grep工具,我们应该不会很陌生,因为在对文本内容进行查找或者过滤筛选的过程中我们经常会用到。那么grep工具到底有什么用处呢?

         (1)grep工具的简介 

           grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。

            grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。

           grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

         grep命令中允许指定的串语句是一个正则表达式,这是一种允许使用某些特殊键盘字符的指定字符串的方法,这种方法中的特殊键盘字符可以用于代表其他字符也可以进一步定义模式匹配工作方式。例如:grep ".*hood" essay1。该命令将在文件essay1中搜索,显示出包含带有字符串hood的字的每一行。命令行中的点表示的是hood之前可以有任意字符,星号指的是在字符串之前点号所表示的任意字符可以有任意个(其中的双引号是可有可无的,但是当语句中包含短语或者空格时就必须加双引号)。

         值得一提的是,grep工具在进行正则匹配的时候使用的是贪心匹配。grep工具在进行查找的时候是按照行来进行查找和过滤的。

       (2)grep命令   

               -E: 使用扩展正则匹配,后面介绍

               --color: 将匹配的到内容进行语法高亮

               -v:反检索,只显示不匹配的行。

               -i :忽略大小写差别。

               -q:安静模式匹配,取消显示,只返回退出状态。0则表示找到了匹配的行。

              -R:递归的读取目录下的所有文件,包括子目录。 比如grep -R 'pattern' test会在 test 及其子目录下的所有文件中,匹配 pattern。

              -V:显示软件版本信息。

              -o:只显示与正则表达式匹配的部分。

              -n:显示匹配的行,并且在匹配的行前面打印行号。

              -b:打印匹配行前面打印该行所在的块号码。
              -c:只打印匹配的行数,不显示匹配的内容。
              -f:从文件中提取模板。空文件中包含0个模板,所以什么都不匹配。
              -h:当搜索多个文件时,不显示匹配文件名前缀。
              -l :打印匹配模板的文件清单。
              -L: 打印不匹配模板的文件清单。
              -s:不显示关于不存在或者无法读取文件的错误信息。

              -w:如果被\<和\>引用,就把表达式做为一个单词搜索。

         下面就使用grep工具来验证一下正则表达式的三要素。

         字符类

    字符含义
    .匹配任意一个字符
    []匹配括号中的任意一个字符
    -在括号内表示字符范围
    ^位于[]括号的开头,匹配除括号中的字符之外的任意一个字符
    [[:xxx:]]grep工具预定义的一些命名字符类([[:alpha:]]匹配一个字母,[[:digit:]]匹配一个数字)

    测试用例:

      

      

       数量限定符

    字符含义
    紧跟在它前面的单元应匹配零次或一次
    +紧跟在它前面的单元应出现一次或多次
    *紧跟在它前面的单元应匹配零次或多次
    {N}紧跟在它前面的单元应精准匹配N次
    {N,}紧跟在它前面的单元应匹配至少N次
    {,M}紧跟在它前面的单元应匹配至多M次
    {N,M}紧跟在它前面的单元应匹配至少N次,至多M次
    测试用


    位置限定符

    字符含义
    ^匹配行首的位置
    $匹配行末的位置
    \<匹配单词开头的位置
    \>匹配单词结尾的位置
    \b匹配单词开头或结尾的位置
    \B匹配非单词开头或结尾的位置

    测试用例:



    特殊符号

    字符含义
    \转义字符,普通字符转义为特殊字符,特殊字符转义为普通字符
    ()将正则表达式的一部分括起来组成一个单元,可以对整个单元使用数量限定符
    |连接两个子表达式,表示或的关系
    测试用例:


            可以看出,()表示将其所包含的内容作为一个整体,作为一个单元,然后可以使用数量限定符来进行修饰限定。

             在我们使用grep工具进行测试的时候,一直都有一个-E选项,那这个选项到底有什么用呢?去掉会有什么不同呢?


       我们可以发现,在去掉-E选项之后,匹配结果出错,并没有按照我们的期望去正常匹配。这到底为什么呢?我们先来看两个概念:

       基准正则表达式:Basic

       扩展正则表达式:Extended

    区别:

          正则表达式的Extened规范和Basic规范基本相同,只是在Basic规范下,有些字符如 ?+ | {} ()应该被解释为普通的字符,要表示上述特殊字符必须要在前面加上\进行转义。在Extended规范下,?+| {}()应该被解释为特殊字符,要取其字面值,也必须对其进行转义。

          所以grep工具带上-E选项,表示使用扩展正则来进行匹配,若没有,则表示使用基准正则来匹配。上述问题就可以如下解决:


          那么,如果在目标字符串中本来就包含了这些字符,想要匹配的话,我们应该怎么做呢?当然,这下就需要用到刚刚说的\转义了。


    其他常用通用字符集及其替换

    符号替换正则匹配
    \d[0-9]数字字符
    \D[^0-9]非数字字符
    \w[a-zA-Z0-9_]数字字母下划线
    \W[^\w]非数字字母下划线
    \s[_\r\t\n\f]表格,换行等空白区域
    \S[^\s]非空白区域

    测试用例:


    在上述测试用例中,-E选项进行\d匹配的出错,这是为什么呢?因为正则表达式分为三类:

       基准的正则表达式:Basic(BREs)

       扩展的正则表达式:Extended (EREs)

       Perl的正则表达式: (PREs)

    grep , egrep 正则表达式特点:

       grep 支持:BREs、EREs、PREs 正则表达式

       grep 指令后不跟任何参数,则表示要使用 ”BREs“

       grep 指令后跟 ”-E" 参数,则表示要使用 “EREs“

       grep 指令后跟 “-P" 参数,则表示要使用 “PREs"

    所以,要解决上述问题,必须使用-P 选项

        在了解了什么是正则表达式以及简单实用了正则表达式后,接下来做两个小练习。

      首先创建一个文件file


    (1)在一个文件中查找电话号码


    (2)在一个文件中查找日期


    (3)在匹配IP地址


        3、零宽断言

        断言用来声明一个应该为真的事实。正则表达式中只有当断言为真时才会继续进行匹配。 接下来的四个用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像\b,^,$ 那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。

      零宽断言: 不匹配长度,只是为了用正则表达式来确定一个位置。

    (1)(?=exp)也叫零宽度正预测先行断言: 它断言自身出现的位置的后面能匹配表达式exp。

    (2)(?<=exp)也叫零宽度正回顾后发断言:它断言自身出现的位置的前面能匹配表达式exp。


      好了,以上就是我所总结的关于shell的正则表达式的相关概念及测试用例。




    展开全文
  • shell正则

    2019-03-11 20:13:37
  • shell中使用正则表达式

    千次阅读 2019-05-25 16:03:07
    亮哥:我们有个需求,在升级版本时,我们是以jar的方式升级的,jar包版本号是会升级的,现在你写一个脚本在升级之前先删除原来jar包,然后把新包放上去。 小编:好的,我来实现一下 于是乎,颠颠的去做了 ...
  • shell正则表达式 目录shell正则表达式常用匹配一、什么是正则表达式?二、元字符三、基本正则表达式元字符四、扩展正则表达式元字符 常用匹配 1、匹配数字: 1+$ 2、匹配Mail:[a-z0-9_]+@[a-z0-9]+.[a-z]+ 3、匹配...
  • 在Linux Shell 编程中,我们常需要用到 正则表达式 进行 文件的匹配在本篇文章中,我们对Linux shell 中的正则表达式 做一个总结,方便之后的shell 编写。参考文章:shell编程之正则表达式...
  • shell正则表达式

    2020-03-05 17:07:34
    描述了一种字符串匹配的模式(pattern)。 在线匹配工具: ... 用过几个之后还是觉得这个是最好用的,支持将正则导成对应的语言如java C# js等还帮你转义了,Copy直接用就行了很方便,另外支持...
  • shell脚本的正则表达式

    万次阅读 2017-11-08 11:13:06
    正则表达式是通过一些特殊字符的排序,用以删除、查找、替换一行或者多行文字字符串的程序。二、特殊字符: 1、字符类 注意:任意字符“.”与重复字符“*” 1).(小数点):代表一定有一个任意字符的意思。 2)...
  • Shell中的if结合正则表达式使用

    千次阅读 2017-12-22 16:27:33
    在字符串的处理中,有时候...Shell中的if结合正则表达式使用通过resylt = $() 进行实现 问题描述:选出当前目录下,以XML结尾的文件。 for filename in `ls` do result=$(echo "$filename" | grep "xml$" ) if [ "$r
  • Linux中使用grep正则提取字符串 echo office365 | grep -P '\d+' -o find . -name &amp;amp;quot;*.txt&amp;amp;quot; | xargs grep -P 'regex' -o xargs会将find结果作为grep的输入,防止find结果过多...
  • shell 正则截取字符串

    万次阅读 2014-09-23 11:33:15
    shell 正则截取字符串 用sed替换功能  echo 'weihongrao' |sed 's/wei\(hong\)rao/\1/g' 比如我有如下文件 test.txt 12344554534543232534sdfhosnfsdf wueorhalfsafsdfse ...djflajsdfasff
  • shell在if中使用正则

    千次阅读 2018-10-06 11:49:35
    Shell if中的正则表达式使用详解 shell中的if语句需要做一个正则判断,查了一下语法记录之。 DATEPATTERN="^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$" if [[ "$STARTDATE" =~ $DATEPATTERN ]] &amp;...
  • shell正则匹配日期

    千次阅读 2017-10-11 15:31:50
    datestr='2015-05-1' if echo $datestr |grep -Eq "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}" && date -d $datestr +%Y%m%d >/dev/null 2>&1 then echo 'ok' else echo 'err' fi
  • 正则表达式[\u4e00-\u9fa5]在shell中为什么匹配不出中文,且在grep中报出grep:Invalid range end,我想在shell中匹配输入的中文该怎么做呢
  • shell正则表达式提取数字

    千次阅读 2019-10-05 17:21:52
    grep 提取数字 grep -Po "\d+\.\d+" 转载于:https://www.cnblogs.com/xiaweifeng/p/11351003.html
  • Shell正则表达式取IP地址

    千次阅读 2018-03-03 18:04:20
    Shell正则表达式匹配取IP地址 演示服务器为虚拟服务器: [root@GaoServer ~]# ifconfig eno16777736: flags=4163&lt;UP,BROADCAST,RUNNING,MULTICAST&gt; mtu 1500 inet 192.168.47.140 netmask 255...
  • shell使用正则表达式来验证数字字符

    千次阅读 2011-09-27 16:13:15
    该函数接收一个参数,就是咱们要验证的字符     number_match(){  if [[ $# = 0 ]]  then  echo "Need a parameter"  return 1  else  if [[ ! $1 =~
  • shell case正则匹配

    千次阅读 2017-08-14 10:44:40
    case $BOOLEAN in  [yY][eE][sS])  echo 'Thanks' $BOOLEAN  ;;  [yY]|[nN])  echo 'Thanks' $BOOLEAN  ;;  'T'|'F')  echo 'Thanks' $BOOLEAN ... [Tt]ure|[Ff]alse)
  • Date: 2018.7.25 https://blog.csdn.net/soaringlee_fighting/article/details/80931295 https://blog.csdn.net/MYsce/article/details/76546480 https://blog.csdn.net/thewindkee/article/details/52785763
1 2 3 4 5 ... 20
收藏数 79,609
精华内容 31,843
关键字:

shell正则