Linux文本三剑客之grep

一、定义

                GREP  :Global search REgular expression and Print out the line的缩写。是一种强大的文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;并把匹配的行打印出来。

                模式:由正则表达式字符及文本文字符所编写的过滤条件

                REGEXP(正则表达式):有一类特殊字符及文本字符所编写的模式,其中有些字符不表示字符的字面意义,而表示控制或通配的功能

                        分为:1、基本正则表达式:BRE(grep支持)

                              2、扩展正则表达式:ERE(egrep支持)

二、grep用法:

         grep [OPTIONS] PATTERN [FILE…]    Note:egrep和grep的用法一致

              选项:

                   –color=auto : 对匹配到的文本着色显示

                    grep root.png

                   -v:显示不能够被pattern匹配到的行

                   -i:忽略字符大小写

                   -o:仅显示匹配到的字符串

                   -q:静默模式,不输出任何信息

                   -A #:after,显示匹配到的行及后#行

                   -B #:before,显示匹配到的行及前#行

                   -C #:context,显示匹配到的行及前后各#行

                   -E:使用ERE    grep -E = egrep

三、正则表达式:

    基本正则表达式元字符:

        1、字符匹配

        点号(.):匹配任意单个字符

        [ ]:匹配指定范围内的任意单个字符

        [ ^ ]:匹配指定范围外的任意单个字符

                       [[:digit:]],[0-9]  表示0-9的任意数字

                       [[:lower:]], [a-z]  表示26个小写英文字母

                       [[:upper:]], [A-Z]  表示26个大写英文字母

                       [[:alpha:]], [a-zA-Z] 表示所有英文字母

                       [[:alnum:]], [[0-9a-zA-Z] 表示数字,所有英文字母

                       [[:space:]]  表示空白字符

                       [[:punct:]]  表示符号字符

        2、匹配次数:用在要指定次数的字符后面用于指定前面的字符要出现的次数

        *:匹配前面的字符任意次,任意长度(*自身表示匹配的次数,本身无任何意义,与glob不同)

                 ex:grep “x*y”:abxy,xay,xxxxxxy(贪婪模式,尽可能多的匹配)

        .*:任意长度的任意字符

        \?:匹配其前面的字符0或1次;即前面的字符可有可无

        \+:匹配其前面的字符至少一次

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

        \{m,n\}:匹配前面的字符至少m次,至多n次

        \{0,n\}:匹配前面的字符至多n次

        \{m,\}:匹配前面的字符至少m次

         3、位置锚定:

         ^:行首锚定,用于模式的最左侧

         $:行尾锚定,用于模式的最右侧

         ^PATTERN$:用于模式匹配整行

              ^$:空行

              ^[[:space:]]*$

         \<或\b:词首锚定:用于单词模式的左侧

         \>或\b:词尾锚定:用于单词模式的右侧

         \<PATTERN\>:匹配整个单词

         4、分组:

         \(\):将一个或多个字符捆绑在一起,当作一个整体进行处理

         \(xy\)*ab

             后向引用:引用前面的分组括号中的模式所匹配字符(而非模式本身)

             Note:分组括号中的额模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为\1、\2、\3,….

                    \1:从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

             ex:\(ab\+\(xy\)*\)

                 \1:\(ab\+\(xy\)*

                 \2:xy

    扩展正则表达式元字符

          1、字符匹配:和基本正则表达式元字符相同

          2、次数匹配:和基本正则表达式元字符不同,无须转义字符\            

                        *:

                        .*:任意长度的任意字符

                        ?:匹配其前面的字符0或1次;即前面的字符可有可无

                        +:匹配其前面的字符至少一次

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

                        {m,n}:匹配前面的字符至少m次,至多n次

                        {0,n}:匹配前面的字符至多n次

                        {m,\}:匹配前面的字符至少m次

           3、锚定匹配:和基本正则表达式元字符相同

           4、分组匹配:和基本正则表达式元字符不同,无须转义字符\

                        ()

                        后向引用基本正则表达式元字符相同

            5、或者:

                    a|b

                    C|cat:C或cat 

            NOTE:fgrep不支持正则表达式搜索,只搜索固定字符串。

                    如:

                       fgrep.png

练习:

            1、显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方式)

                (1)、grep -i '^s' /proc/meminfo

                        练习1.png

                 (2)、grep '^[Ss]' /proc/meminfo

                        练习1第二种方法.png

            2、显示/etc/passwd文件中不以/bin/bash结尾的行

                   grep -v '/bin/bash$' /etc/passwd

                        练习2.png

            3、显示/etc/passwd文件中ID号最大的用户的用户名

                   sort -t: -k3 -n /etc/passwd|tail -1|cut -d: -f1

                        练习3.png

            4、如果用户root存在,显示其默认的shell程序

                    id root &> /dev/null && grep '^root\>' /etc/passwd | cut -d: -f7

                        练习4.png

            5、找出/etc/passwd中的两位或三位数

                    grep –color=auto '\<[0-9]\{2,3\}\>' /etc/passwd

                        练习5.png

            6、显示出/etc/rc.d/rc.sysinit文件中,至少以一个空白字符开头的且后面存非空白字符的行

                    grep '[[:space:]]\+[^[space]]\+' /etc/rc.d/rc.sysinit

                        练习6.png

            7、找出“netsat -tan”命令的结果中以‘LISTEN’后跟0、1或多个空白字符结尾的行

                    netstat -tan|grep 'LISTEN[[:space:]]*$'

                        练习7.png

            8、添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin);而后找出/etc/passwd文件中用户名同shell的行

                    useradd bash

                    useradd basher

                    useradd testbash

                    useradd -s /sbin/nologin nologin

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

                        练习8.png

              9、显示当前系统root、centos或user1用户的默认shell和UID(使用egrep)

                    egrep '^(root|user1|centos)\>' /etc/passwd|cut -d: -f3,7

                        练习9.png

              10、找出/etc/rc.d/init.d/function文件(cnegtos6)中某单词后面跟一个小括号的行

                    egrep -o '^[_[:alpha:]]+\(\)' /etc/rc.d/init.d/functions

                        练习10.png

              11、使用echo输出一个路径,使用egrep取出其基名

                    echo '/mnt/sdc' |egrep -o '[^/]+/?$'|cut -d'/' -f1

                        练习11.png

       

  

原创文章,作者:Net18-天津-康康,如若转载,请注明出处:http://www.178linux.com/14112

(0)
Net18-天津-康康Net18-天津-康康
上一篇 2016-04-05 22:46
下一篇 2016-04-05 22:49

相关推荐

  • CentOS 6的开机流程及root密码破解

    一、CentOS 6的开机流程详解 启动流程详解 1、POST:    Power-On-Self-Test,加电自检,是BIOS功能的一个主要部分。负责完成对CPU、主板、内存、硬盘子系统、显示子系统、串并行接口、键盘、CD-ROM光驱等硬件情况的检测。 2、BootSequence(BIOS):    决定那个磁盘…

    Linux干货 2016-09-13
  • vim学习

    vim学习 认识与介绍   vim是一款linux下查看编辑文本文件的一款文本编辑器。一般用来查看修改配置文件、日志文件等文本类文件。 打开文件   vim [OPTIONS] [FILE …]     +#: 打开文件后,直接让文件处于第#行     +/…

    Linux干货 2016-10-09
  • 0804正则表达式作业

    用正则表达式表示IP地址         首先来分析一下,制IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(1…

    Linux干货 2016-08-10
  • 详解用户,组,权限管理

    详解用户,组,权限管理 M21-陆东贵 测试环境:CentOS 7.2 内容介绍: 我们要使用操作系统进行工作,就需要人机交互操作,这时候计算机就需要创建用户,通过用户来实现操作,而且随着用户的增加需要给用户分组,这时候就需要对文件进行权限管理。 需要使用的工具:       用户相关工具:useradd; …

    Linux干货 2016-10-25
  • scp命令

    scp命令: 基于ssh连接完成复制   scp  [options]  SRC…  DEST/ scp  [options]  SRC  DEST   存在两种使用情形: PULL获取:  scp  [options]  [user@]host:/PATH/TO/SOMEFILE   /PATH/TO/SOMEFILE PU…

    Linux干货 2017-10-21
  • 学习宣言

    好好学习,天天向上。

    Linux干货 2016-10-24

评论列表(1条)

  • stanley
    stanley 2016-04-05 22:49

    写标签提高文章收录率,样式上建议使用markdown