美文网首页shell
shell快讲第三节--正则表达式

shell快讲第三节--正则表达式

作者: 梦回上玄 | 来源:发表于2019-08-19 10:59 被阅读0次

    shell快讲第一节--shell基础
    shell快讲第二节--管道与重定向
    shell快讲第三节--正则表达式
    shell快讲第四节--sed与awk
    shell快讲第五节--shell语法基础
    shell快讲第六节--shell函数编程
    shell快讲第七节--shell编程规范与调试
    shell快讲第八节--shell编程实战

    正则表达式

    简介

    正则表达式在所有的开发语言中都存在,在shell中也是非常频繁使用,常见的命令工具有grep、sed、awk等。因此不理解正则表达式就无法写出好用的脚本,甚至很多命令的使用也将存在问题,正则表达式随着版本和语言的不同,语法存在的略微不同,这里我们不讨论太深的用法,仅仅强调常见的用法,正则表达式即是为了从一组数据中按照一定规则过滤出匹配的数据:


    1-04-01.png

    正则表达式基础

    正则表达式有很多的元字符,下面列下常见的元字符,元字符很多,组合也很复杂,一般情况下我们只需要知道简单使用即可,复杂的正则表达式一般可以去专门的网站进行测试和搜索

    元字符 描述 元字符 描述
    . 匹配任意单个字符^ ? 匹配其前面的字符1次或0次
    * 匹配其前面的字符任意次 \{m,n\} 匹配其前面的字符至少m次至多n次
    .* 任意长度的任意字符 ^ 行首匹配
    [] 匹配制定范围内的任意单个字符 $ 行尾匹配
    [^] 匹配指定范围外的任意单个字符 \ 转义符号,屏蔽一个元字符的特殊意义
    + 匹配1个或多个前面的字符 | 表示“或”,匹配一组可选字符

    通配符

    除了grep,sed,awk。bash shell本身不支持正则表达式,但是支持通配符,我们权当最简单的正则表达式吧,借以理解下正则

    >>> ls -l *.md #显示md结尾的文件,*号匹配任意多字符
    >>> ls -l 1-0?.md#显示1-0x.md,?符号匹配任意一个字符
    >>> ls -l 1-0[1-2]*.md #读者自己猜猜这是匹配什么
    

    正则表达式

    grep命令

    下面开始正式介绍正则表达,那么不得不提的就是Linux的命令三剑客,这三个命令其实复杂的都可以单独写一本书,当然对我们来说也是没有必要的,我们作为日常使用,只需要记住基本的用法,需要复杂使用的时候,我们只需要去百度即可。下面先简单看下grep的选项,大家要注意grep选项不是正则元字符,不要搞混

    选项 意愿 选项 意义
    -c 只输出匹配行的数量 -i 搜索时忽略大小写
    -h 查询多文件时不显示文件名 -l 只列出符合匹配的文件名
    -n 列出所有的匹配行,并显示行号 -s 不显示不能存在或无匹配的错误信息
    -v 显示不包括匹配文本的所有行 -w 匹配整词
    -x 匹配整行 -r 递归搜索
    -q 不输出结果,以退出状态表示搜索是否成功 -E 支持扩展正则表达式
    -F 不支持正则表达式,按照字符串字面意思匹配 -b 打印匹配行距离文件头偏移量

    选项用法举例:

    >>> echo "this is a world" |grep world #匹配world这几个字符
    >>> grep 'shell' test.txt #匹配testfile中的shell几个字符
    >>> grep -i 'shell' test.txt #不区分大小写的匹配
    >>> grep -n 'shell' test.txt #带行号显示
    >>> grep -c 'shell' test.txt #统计匹配的行的数量
    >>> grep -v 'shell' test.txt #显示不匹配'shell'的行
    >>> ... 
    

    正则用法举例:

    >>> grep '[0-9]' test.txt #匹配0-9的数据的行
    >>> grep '[a-z][0-9]' test.txt #匹配小写字母开头,第二是数字的行
    >>> grep '^r.*n$' test.txt #匹配r开头,n结尾,“.*”代表任意多
    >>> cat /etc/passwd |grep '^\(root\|zhang\)'
    

    egrep

    egrep=grep -E 其实就是grep的扩展正则模式

    fgrep

    快速grep命令,类似grep -F,不支持正则表达,按照字符串字面意思进行匹配
    正则掌握到这里一般就足够使用了,这里给了一些常见的使用命令常见场景,大家也可以去看下传送门

    总结:

    shell的正则我觉得没有学会一说,也很难短时间学的通透,建议学会基本的使用方法(但一定要会),实际工作场景中多利用搜索引擎,一个好的正则可以提高脚本运行效率并降低误匹配

    相关文章

      网友评论

        本文标题:shell快讲第三节--正则表达式

        本文链接:https://www.haomeiwen.com/subject/wbfssctx.html