设为首页 收藏本站
查看: 702|回复: 0

Shell 正则表达式 基础

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-12-24 09:12:25 | 显示全部楼层 |阅读模式
一、linux文本查找命令
      三个基本常用的命令
      1、grep:最早的文本匹配程序,使用POSIX定义的基本正则表达式(BRE)来匹配文本
      2、egrep:扩展式grep,其使用扩展式正则表达式(ERE)来匹配文本
      3、fgrep:快速grep,这个版本匹配固定字符串而非正则表达式。
二、grep的基本语法
      GREP [options … ] pattern-spec [files…]
      用途:匹配一个或多个模式的文本行
      options:
   -E:使用扩展正则表达式进行匹配
       -i:忽略大小写
         --color 加以颜色可以添加别名
             laias gerp ='grep --color'
   -v:反向显示,没有被模式匹配到的行
      -o:只显示被模式匹配到的字符串
      -A(后面加数字):找到行显示行后面的n行
            grep -A 2 '^core id ' /prp/cpuinfo
   -B(后面加数字):找到行显示前面的n行
            grep -B 2 '^core id ' /prp/cpuinfo
   -C(后面加数字):找到行的前后n行
            grep -C 2 '^core id ' /prp/cpuinfo

三、简单介绍
        组成部分:一般字符:没有特殊意义的字符
                             特殊字符:也称meta字符,元字符,在正则表达式中有特殊的意义
         常见的元字符:
             \ :通常用于打开或者关闭后续字符的特殊含义,如\(…\)与\{…\}
             . :匹配任意单个字符(除NUL)  
           *  :   匹配前面的字符任意次
           .* :任意长度的任意字符  例如:  a.*b:  以字母a开头
           [] :匹配指定范围内任意单个字符
          [^] :匹配指定范围外的任意字符
           \? :匹配前面的字符0次或者1次
           \{…\} :匹配前面的字符1次或者0次
                      例如:   \{0,1\}  匹配一次
                                      grep 'a\{2,3\}' aa.txt
                                       grep 'a.\{2,3\}' aa.txt
    egrep:               
         + : 匹配前面的正则表达式1个或者多个扩张
         | :匹配|前或者后的正则表达式
        ( ):匹配方刮号起来的正则表达式群   ([])

        位置锚定:
         ^ :锚定行首,此字符后面的任意内容必须出现在行首
         $:锚定行尾,此字符前面的任意字符必须出现在行尾
        ^$:空白行

          \<:其后面的任意字符必须作为单词首部出现
          \>:其前面的任意字符必须作为单词的尾部出现
              \<root\>
              实例:    grep '\<root' aa.ttx    grep 'root\>' aa.ttx   grep '\<root\>' aa.ttx

           分组:\(\)
                       \(ab\)*   匹配ab
                         向后引用
                          \1:引用第一个左刮号以及与之对应的右刮号内的所有内容
                          \2:引用第二个左刮号以及与之对应的右刮号内的所有内容
                          \3:引用第三个左刮号以及与之对应的右刮号内的所有内容
                          \4:引用第四个左刮号以及与之对应的右刮号内的所有内容
                                实例:grep '\([0-9]).*\1$' aa.txt

四、grep\egrep\fgrep 之间的关系
         grep:在没有参数的情况下,只输出符合RE字符串之句子,常见的参数在“一”中
         egrep:为grep的扩充版,改良了许多传统的grep不能或者不便的操作;such as:
                 --- grep 之下不支持?与+这两种字符,但是egerp可以得
                 --- grep  不支持a|b 或则 (abc | xyz) 这类“或一”比对,但是egerp可以
                 --- grep 在处理{n,m}时,需要{与}处理,但egrep不需要



五、字符集
          [:alnum:]  数字字符    [:digit:]  数字字符  [:punct:]  标点符合字符   [:alpha:]   字母字符
          [:graph:]   非空字符    [:space:] 空格字符  [:blank:]   空格与定位字符  [:lower:]  小写字母
          [:upper:]   大写字符   [:cntrl:]  控制字符   [:print:]  可显示的字符    [:xdigit:] 16进制数字

六、实例
          1、 grep 'h.\{0,4\}p$' a:匹配a文件中任意字符至少0次之多4次
          2、 grep 'h.\{1\}p$' a   :匹配a文件中任意字符1次
          3、 grep 'h.\{1,\}p$' a  :匹配a文件中任意字符至少1次
          4、  grep -o -E'[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' grub.cfg  搜索IP地址
          5、 grep  --color -E'C|cat' a.txt
          6、 ls  |  grep '[[^[:space:]]*[0-9]'   显示以数字结尾但是不包含空白的文件。
          7、关于grep和egrep

               如下通过常用实例来学习BRE和ERE匹配,源文件url.txt内容如下:
            www.baidu.com
            http://www.baidu.com
            https://www.baidu.com
            http://wwwbaiducom
            baidu.com
            baidu
                 匹配以http或者https开头,并且其后为:并且含有.的串
            BRE匹配:
            grep '^https\{0,1\}.*\..*' url.txt
            ERE匹配:
            grep -E '^https?.*\..*' url.txt
                匹配结果如下:
            http://www.baidu.com
            https://www.baidu.com


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-155522-1-1.html 上篇帖子: shell 截取日志 统计链接数 统计日志ip 下篇帖子: shell脚本的基本使用 表达式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表