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)
上一篇 2016-04-05 22:46
下一篇 2016-04-05 22:49

相关推荐

  • 数据库的备份和恢复

    数据库的备份和恢复 一 (理论篇)、数据库备份与恢复基础 1、数据库的备份与恢复 备份:存储的数据副本; 原始数据:持续改变; 恢复:把副本应用到线上系统; 仅能恢复至备份操作时刻的数据状态; 时间点恢复: binary logs; 2、为什么备份? 灾难恢复: 硬件故障(冗余)、软件故障(bug)、自然灾害、黑客攻击、误操作、…&nb…

    2016-11-22
  • Linux计划任务

    计划任务 Linux任务计划、周期性任务执行 • 未来的某时间点执行一次任务:     at     batch:系统自行选择空闲时间去执行此处指定的任务 • 周期性运行某任务:      cron at任务 …

    Linux干货 2016-09-10
  • 第七周学习总结–系统启动流程

    写在前面 作为一个理工科的你,我相信你一定给自己或者给别人装过windows操作系统,作为windows操作系统都图形化了,因此我们可能很难去了解中间都发生了什么。比如使用U盘安装的时候,网上一大堆某某某U盘制作系统工具,按照网上的教程,制作完成以后,就可以在要装系统的电脑上点击电源键狂按F12(不同的电脑可能不同)进入BIOS设置了,然后就等着使用了。作为…

    2018-01-14
  • 细说linux上的特殊权限位

    linux上的文件的权限 linux的哲学思想之一就是一切皆文件。这样说来,每台安装了linux的主机上,就会有大量的文件。而另一方面,linux在安全方面有着极为出色的表现。众所周知,linux是一个多用户的系统,因此为一个文件加上合适的权限为显得非常有必要了。linux上的基本权限我就不一一介绍了,请不熟悉的同学自行百度脑补。我们来说说linux上文件和…

    Linux干货 2017-04-10
  • ansible原理及简单应用

    一、基础介绍 1、简介 ansible是新出现的自动化运维工具,基于python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供…

    Linux干货 2016-01-13
  • 压缩和解压缩

    今天我们所讲一些压缩以及解压缩的内容,可以方便我们去传输一些数据较大的文件,以及可以降低我们的内存使用率, 节省空间。我们常用的工具对单个文件进行压缩有4种,对于多个文件进行打包压缩有2种。 1、compress(单个文件压缩)     压缩后的文件后缀名都是.Z结尾     compress fi…

    2017-08-12

评论列表(1条)

  • stanley
    stanley 2016-04-05 22:49

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