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

相关推荐

  • 文件管理类命令详解

    文件管理类命令详解 文件查看 cat 功能描述:连接文件并打印到标准输出上 命令格式:cat [OPTION]… [FILE]… OPTION: -b 对所有非空白行编号 -n 给所有输出行编号 -s 将连续多行空白行显示为一行空白行 -E 在每一行行尾显示$ FILE:可显示多个文件,文件之间以空格分隔 举例 将file1、file…

    Linux干货 2017-07-09
  • Nginx之ngx_http_proxy_module模块详解

    一、正反向代理简介       1、正向代理:局域网内的机器借助于代理服务器访问局域网外的网站          这时正向代理的功能:         &nbs…

    2017-06-25
  • Linux命令之:setfacl和getfacl

    命令总结之:setfacl和getfacl acl:access control list,实现灵活的权限管理 除了文件的所有者,所属组合其他人,可以对更多的用户设置权限 acl生效顺序:所有者、自定义用户、自定义组、其他人 1、首先我们查看man帮助文档说明 [root@centos7 sixijie]# man setfac…

    Linux干货 2016-08-04
  • 配置LAMP服务器网站架构

    配置LAMP服务器网站架构 LAMP指的Linux(操作系统)、ApacheHTTP 服务器,MySQL(有时也指MariaDB,数据库软件) 和PHP(有时也是指Perl或Python) 的第一个字母,一般用来建立web应用平台。 结构拓扑 httpd服务器配置 安装环境 yum install httpd -y 修改httpd配置 vim /etc/ht…

    2017-06-06
  • for,while,until简介

    Shell(以Bash为例)中的循环语句一般有for、while、until这几种,偶尔还有写错语法的时候,这里结合实例来自己总结一下。也为今后使用提供一个快捷的资料获取渠道。 一、for循环语句 实例1.1 最基本的for循环: (传统的形式,for var in …) 代码如下: #!/bin/bashfor x in one two three fou…

    Linux干货 2016-08-22
  • 正则表达式练习

       grep练习  : 1 、显示/proc/meminfo 文件中以大小s 开头的行:  2 、显示/etc/passwd 文件中不以/bin/bash 结尾的行      3 、显示用户rpc 默认的shell        4 、找出/etc…

    Linux干货 2016-08-10

评论列表(1条)

  • stanley
    stanley 2016-04-05 22:49

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