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
下一篇 2016-04-05

相关推荐

  • 马哥教育网络班21期+第六周课程练习

    请详细总结vim编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#;  ~]# cp /etc/rc.d/rc.sysinit /tmp/  ~]# vim /tmp…

    Linux干货 2016-08-22
  • Ip 地址 及 网络配置

    Ip 地址 及 网络配置 IP地址  它们可唯一标识 IP 网络中的每台设备  每台主机(计算机、网络设备、外围设备)必须具有唯 一的地址 IP地址由两部分组成:       网络ID:  标识网络  每个网段分配一个网络ID       主机 ID:  标识单个主…

    Linux干货 2016-09-05
  • LVM的管理和使用

    LVM的管理和使用

    Linux干货 2017-10-27
  • Linux文件管理与bash特性

    Linux上的文件管理命令 目录管理命令: mkdir:make directories mkdir [OPTION]… DIRECTORY… -p: 自动按需创建父目录; -v: verbose,显示详细过程; -m MODE:直接给定权限; 注意:路径基名方为命令的作用对象;基名之前的路径必须得存在; r…

    Linux干货 2017-04-01
  • 作业管理

    作业管理 ·Linux的作业控制:          前台作业:通过终端启动,且启动后一直占据终端;          后台作业:可通过终端启动,但启动后即转入后台运行(释放终端) ·如何让作业运行于…

    Linux干货 2016-09-11
  • rpm

    软件运行环境 API:Application Programming Interface     POSIX:Portable OS 程序源代码–> 预处理–> 编译–> 汇编–> 链接   &nb…

    Linux干货 2016-08-21

评论列表(1条)

  • stanley
    stanley 2016-04-05 22:49

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