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

相关推荐

  • hbase安装配置(整合到hadoop)

    1.  快速单击安装 在单机安装Hbase的方法。会引导你通过shell创建一个表,插入一行,然后删除它,最后停止Hbase。只要10分钟就可以完成以下的操作。 1.1下载解压最新版本 选择一个 Apache 下载镜像:http://www.apache.org/dyn/closer.cgi/hbase/,下载 HBase Re…

    Linux干货 2015-04-13
  • 设计模式(十一)代理模式Proxy(结构型)

    1.概述        因为某个对象消耗太多资源,而且你的代码并不是每个逻辑路径都需要此对象, 你曾有过延迟创建对象的想法吗 ( if和else就是不同的两条逻辑路径) ? 你有想过限制访问某个对象,也就是说,提供一组方法给普通用户,特别方法给管理员用户?以上两种需求都非常类似,并且都需要解决一个更大的问题:你如何提供…

    Linux干货 2015-07-09
  • 如何安装VMware Workstation

    1、打开安装包,直接点击“下一步” 2、选择接受条款,单击“下一步” 3、选择安装路径,单击“下一步” 4、单击“下一步”,也可以勾选掉两个选项   5、单击“下一步”   6、点击“安装”   7、完成安装  

    2017-07-11
  • 第10周作业(上)

    第10周作业 1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情)。CentOS系统启动详细的过程如下(以CentOS7为例): 加电自检(POST)按下电源开关,BIOS系统随即开始加电自检,检查CPU、内存、主板及各接口、硬盘、键盘、光驱等,检测它们的好坏。 读取启动顺序检查完成后,BIOS会根据预先设定好的启动顺序去挨个寻找可引导…

    Linux干货 2017-01-03
  • 第十周作业

    第十周作业   1、CentOS系统启动流程: 1.加电自检:由bios去检测各硬件是否存在且是否正常运行,然后进行硬件初始化 2.选择启动顺序,加载mbr:根据bios设置的设备启动顺序,找到第一个安装有bootloader的设备进行启动,bootloader去识别加载操作系统中的核心文件,并提交到内存中运行,进而来启动相对应的操作系统 由于bootloa…

    Linux干货 2017-11-13

评论列表(1条)

  • stanley
    stanley 2016-04-05 22:49

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