zoukankan      html  css  js  c++  java
  • 04、grep与正则表达式

    1、grep程序

        Linux下有文本处理三剑客 -- grep sed awk

        grep:文本 行过滤工具

        sed:文本 行编辑器(流编辑器)

        awk:报告生成器(作文本输出格式化)

     

        grep

            包含三个命令:grep egrep fgrep,它们是用来进行 行模式(pattern)匹配的

             egrep = gerp -E //使用扩展的正则表达式进行匹配

            fgrep = fast grep //只使用文件通配符进行匹配

            *grep默认使用正则表达式进行文本匹配*

        grep的用法:
            grep [option] ... PATTERN [filename]

       

       grep的常见选项 -- option
               -E  支持使用扩展的正则表达式(ERE)(regexp)
               -P  使用perl语言的正则表达式引擎进行搜索(每一种语言的正则表示式引擎都不相同,甚至sed grep awk使用的regexp引擎也不相同)
               -i   忽略大小
               -v  进行反选
               -o  仅仅输出匹配的内容(默认输出的是匹配到的行)
               --color=auto  语法着色
               -n  显示行号
               -w  匹配固定的单词

        PATTERN--正则表达式
            作用:通过一些特殊字符,来表示一类字符内容,然后交给前面的命令来执行;如果使用特殊字符本身含义,就需要 进行转义;

            回顾:文件通配符(globbing)
                * ? [ ] [^ ]

            1、字符匹配
                . 任意一个字符 ?
                [ ] 范围内的任意一个字符
                [^ ] 范围外任意一个字符
                字符类:[:digit:] [:alnum:] [:alpha:] [:lower:] [:upper:] [:space:] [:punct:]
            2、次数匹配
                * 匹配前面的字符0次到无数次
                ?匹配前面的字符0次到1次
                + 匹配前面的字符1次到n次
                {m} 配置前面的字符m次
                a{7} aaaaaaa
                {m,n} 匹配前面的字符m到n次
                {0,n} 匹配前面的字符0次到n次 【0要不要?(不行!)】
                {m,} 匹配前面的字符至少m次
            3、位置锚定
                ^ 锚定行首
                $ 锚定行尾
                ^[[:space:]]*$ 空白行
                 锚定词首和锚定词尾
                > 锚定词尾
                < 锚定词首
                <root> rooter
            4、分组
                abc* abcccc abc我们要看成一个整体
                () 示例:(abc)* abcabcabc abcccc
                **分组特性:默认情况下,Linux系统会为分组指定变量 ,变量的表示形式 1 2 3 ... (后向引用)

                ((立秋)已过),(香港)依旧不宁。多区出现非法集会,(暴力)示威者破坏公物、堵塞干道,或以激光、砖块袭警、投掷汽油弹,更有甚者公然殴打内地游客及记者。随着示威升级,怂恿“反中乱港”的幕后势力也正慢慢浮现。

                示例:(ab+(xy)*) 其中 1 = ab+(xy)* , 2 = xy
                    abbbbbxyxyxyabxy

            补充一下:扩展的正则表达式
                【标准正则表达式中的 都可以去掉】
                分组 : () 后向引用 1 2 3 ...
                或: |
                    示例:grep -E "(svm|vms)" /proc/cpuinfo //查看CPU的虚拟化功能

    练习:
    1、显示/proc/meminfo文件中大小s开头的行
        grep -i "^s" /proc/meminfo
    2、显示/etc/passwd文件中不以/bin/bash结尾的行
        grep -v "/bin/bash$" /etc/passwd
    3、显示/etc/passwd文件中UID号最大的用户的用户名
        sort -n -t: -k3 /etc/passwd | tail -1 | cut -d: -f1
    4、如果用户root存在,显示其默认的shell程序
        grep "^root>" /etc/passwd &> /dev/null && grep "^root>" /etc/passwd | cut -d: -f7 
        id root &> /dev/null && grep "^root>" /etc/passwd | cut -d: -f7 
    5、找出/etc/passwd中的两位或三位数
        grep "[0-9]{2,3}"  /etc/passwd
            -w   //匹配固定单词 
            <[[:digit:]]{2,3}>
            [0-9]{2,3}
    6、显示/etc/rc.d/rc.sysinit文件中,至少以一个空白字符开头的且后面为非空白字符的行
        grep "^[[:space:]]+.*[^[:space:]]$" /etc/rc.d/rc.sysinit
    7、找出”netstat -tan”命令的结果中,以“LISTEN”后跟0、1或多个空白字符结尾的行
        netstat -tan | grep "LISTEN[[:space:]]*$"
    8、添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin):而后找出/etc/passwd文件中用户名同shell名的行
        useradd bash           /bin/bash
        useradd testbash
        useradd basher
        useradd -s /sbin/nologin nologin
        grep "(^[[:alnum:]]+>).*1$" /etc/passwd
    9、IP地址如何匹配?
        ip地址:
            0-255.0-255.0-255.0-255
            0-255
            2 0-4 0-9  2[0-4][0-9]
            2 5 0-5    25[0-5]
            1 0-9 0-9  1[0-9][0-9]
            0 0-9 0-9  [0-9][0-9]
            0 0    0-9  [0-9]
        
    grep -owE "((([0-9])|([1-9][0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-9])|([1-9][0-9])|(1[0-9]{,2})|(2[0-4][0-9])|(25[0-5])){1}[[:space:]]"

     

     

     

     

  • 相关阅读:
    使用Flink实现索引数据到Elasticsearch
    elasticsearch更改mapping(不停服务重建索引)
    elasticsearch篇之mapping
    Elastalert安装及使用
    基于Elastalert的安全告警剖析
    elastalert
    Apache Flink:特性、概念、组件栈、架构及原理分析
    kafka partition(分区)与 group
    用Spring构建企业Java应用程序的方法
    Authentication and Authorization in ASP.NET Web API
  • 原文地址:https://www.cnblogs.com/cnxy168/p/11409019.html
Copyright © 2011-2022 走看看