• grep与正则表达式


    一、grep程序

    1、Linux下有文本处理三剑客:grep sed awk

      grep:文本 行过滤工具

      sed : 文本行编辑器(流编辑器),改文件一般用sed

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

    2、Grep

    包含三个命令:它们是用来进行行匹配(pattern)匹配的

    (1)grep的分类

           grep

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

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

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

      (2)grep的用法

                     grep [option] … PATTERN [filename]

      (3) grep的常见选项

                     -E 支持使用扩展的正则表达式(ERE)regexp

                     -P 使用perl语言的正则表达式引擎进行搜索(每种语言的正则表达式引擎搜索机制都不同,甚至sed grep awk使用的regexp引擎也不相同)

                      -i  忽略大小写

                      -v  进行反选             

                      -o  仅仅输出匹配的内容(默认输出的是匹配到的行)     

                      --color=auto 语法着色

                      -n  显示行号

    二、PATTERN—正则表达式

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

    1、 字符匹配

      .  代表任意一个字符 ?

      [ ] 代表范围内的任意一个字符

      [^ ] 代表范围外的任意一个字符

      [0-9] [:digit:] [:alnum:][:alpha:][:upper:][:space:][:punct:]

    2、 次数匹配

      * 匹配前面的字符0到无数次

      ? 匹配前面的字符0到1次

      + 匹配前面的字符1到n次

      {m} 匹配前面的字符m次

      {m,n} 匹配前面的字符m到n次

      {m,} 匹配至少m次

        示例:[abc] + abbbbcccc

                   a{7}  匹配a7次,即aaaaaaa

                   {0,n} 匹配前面的字符0次到n次 【0次要不要】

    3、 位置锚定

      ^  锚定行首

      $  锚定行尾

       锚定词首和锚定词尾

      > 锚定词尾

      < 锚定词首

        示例:< oot>  //锚定单个单词

    4、 分组

    分组特性:默认情况下,Linux系统会分为分组指定变量,变量的表示形式1 2 3……

    abc* ->abcccccc   此时我们需要把abc看成一个整体

    () 

    示例:(abc)* -> abcabcabc

       (ab+(xy)*),其中1=ab+(xy)*,2=xy

    三、练习

    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

    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

      useradd testbash

      useradd basher

      useradd -s /sbin/nologin nologin

      grep "(^[[:alnum:]]+>).*1$" /etc/passwd

  • 相关阅读:
    免费linux远程主机nitrousIO
    利用PyWapFetion发免费天气短信
    接口中的 sort排序 + md5加密
    即点即改心得
    js判断客户端访问是安卓还是ios
    php将时间戳转换成几小时前的格式封装
    前端请求接口出现的跨域问题
    使用redis技术实现注册登录列表以及关注功能
    windows下的redis安装以及扩展安装
    Yii2 学习心得
  • 原文地址:https://www.cnblogs.com/www-k/p/11350007.html
Copyright © 2020-2023  润新知