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

    1、grep程序
      Linux下有文本处理三剑客 -- grep sed awk
        grep:文本行过滤工具
        sed:文本行编辑器(流编辑器,一行一行编辑)
        awk:报告生成器(做文本输出格式化)

        grep
           包含三个命令:grep egrep fgrep他们是用来进行 行模式(pattern)匹配的
           egrep=grep -E 使用扩展的正则表达式进行匹配
           fgrep=fast grep 只使用文件通配符进行匹配
           grep默认使用则正表达式进行文本匹配

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

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

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

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

            1、字符匹配
              . 任意一个字符 ?
              [] 范围内的任意一个字符
              [^ ] 范围任意一个字符
              [0-9]
            2、次数匹配
              * 匹配前面的字符0次到无数次
              ? 匹配前面的字符0次到1次
              + 匹配前面的字符1次到n次
              {m} 匹配前面的字符m次
              a{7}aaaaaaa
              {m,n} 匹配前面的字符m到n次
              {m,} 匹配前面的字符至少m次
            3、位置锚定
              ^ 锚定行首
              $ 锚定行尾
               锚定词首和锚定词尾
              > 锚定词尾
              < 锚定词尾
            4、分组
              abc* abcccccc abc看做一个整体、
              () 示例: (abc) abcabcabc abcccc
              分组特性:默认情况下,linux系统会为分组指定变量,变量的表示形式 1 2 3

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

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

    练习:
    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 //匹配固定单词
    <[0-9]{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]

    2[0-4][0-9]|25[0-5]|1[0-9][0-9]|[0-9][0-9]|[0-9].2[0-4][0-9]|25[0-5]|1[0-9][0-9]|[0-9][0-9]|[0-9].2[0-4][0-9]|25[0-5]|1[0-9][0-9]|[0-9][0-9]|[0-9].2[0-4][0-9]|25[0-5]|1[0-9][0-9]|[0-9][0-9]|[0-9]
    ((2[0-4][0-9])|(25[0-5])|(1[0-9][0-9])|([0-9][0-9])|([0-9])).1.1.1


    <[1-9]|[1-9][0-9]|1[0-9]{2}|2[01][0-9]|22[0-3]>
    1-9
    1-9 0-9
    1 0-9 {2}
    2 [01] 0-9 200 - 219
    2 2 0-3 220 - 223

    (.<[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4]>){2}
    0-9
    1-9 0-9
    1 0-9 0-9
    2 0-4 0-9
    2 5 0-4
    ( ){2}

    .<[1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4]>
    1-9
    1-9 0-9
    1 0-9 0-9
    2 0-4 0-9
    2 5 0-4

  • 相关阅读:
    eclipse中打断点debug无效
    Jenkins构建部署Maven项目
    自动生成实体类和xml
    session 控制单点登录
    eclipse team 没有svn
    easyui combobox 设置滚动条
    unkow jdbc driver : http://maven.apache.org
    easyui datagrid列显示图片
    mysql中计算日期整数差
    Map<String, Object>转Object,Object转 Map<String, Object>
  • 原文地址:https://www.cnblogs.com/liuyuanzzz/p/11354491.html
Copyright © 2011-2022 走看看