grep,egrep及元字符和posix字符集

grep命令详解

   grep命令是*nix上匹配行的一个工具,可以用来搜索匹配的行,对于查找指定字符和字符行非常好用,grep非常有效grep家族包含grep,egrep,fgrep,

grep使用的是基本元字符,egrep使用的是扩展正则表达式,,可以使用grep -E来使用egrep,使用grep -F来使用fgrep,或者直接使用egrep,fgrep,一般

来说grep,egrep比较常用,较少使用fgrep.下面来主要介绍grep和egrep.


     语法格式为      grep [OPTIONS] PATTERN [FILE...]
                     grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]



grep的常用选型

        -i: 不区分大小写

         -n: 匹配行显示行号

         -v: 反向匹配,显示不匹配的行

         -w:匹配字母和数字

         -c:显示匹配的行数

         --color:用颜色显示匹配到的字符

         -o:仅显示匹配的字符

         -A:显示匹配的后几行

         -B:显示匹配的前几行

         -C:显示匹配的上下几行


基本元字符

       ^ :锚定行首

       $ :锚定行尾

       . :零个或一个字符

       * :一个字符

       []: 里面任一字符

       [^]:非^后的字符

       \(..\)  后向引用

       \<   :锚定字符

       x\{m\}  字符x出现m次

       x\{m,\}  字符m大于m次

       x\{m,n\}  字符出现大于等于m次小于n次

       \w :匹配单词

       \W  

       \b 匹配单词词首或词尾


扩展元字符
        ?  :0个或1个前面字符
        +  :1个或多个前面字符
        () :一个表达式,可以用来后向引用  
        |  :左右两边或者,表示选择

POSIX字符类

[:alnum:]

文字数字字符

[:alpha:]

飞数字字符字符

[:digit:]

数字字符

[:graph:]

非空字符(非空格、控制字符)

[:lower:]

小写字符

[:cntrl:]

 控制字符

[:print:]

非空字符(包括空格)

[:punct:]

标点符号

[:space:]

所有空白字符(新行,空格,制表符)

[:upper:]

大写字符

[:xdigit:]

十六进制字符



实例

1、显示/proc/meminfo文件中以大小写s开头的行;
        grep [Ss]  /proc/meminfo
    2、取出默认shell为非bash的用户;
      grep -v 'bash' /etc/passwd
    3、取出默认shell为bash的且其ID号最大的用户;
        grep 'bash' /etc/passwd | cut -d: -f3 |sort |tail -1
    4、显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;
       grep '^#[[:space:]]\{1,\}[[:space:]]\{1,\}'  /etc/rc.d/rc.sysinit
    5、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;
            grep '^[[:space:]]\{1,}' /boot/grub/grub.conf
    6、找出/etc/passwd文件中一位数或两位数;
            grep '\<[0-9]\{1,2\}\>' /etc/passwd
    7、找出ifconfig命令结果中的1到255之间的整数;
                ifconfig eth0|egrep '2[0-5][0-5]|1[0-9][0-9]|[1-9][0-9]|[0-9]'
    8、查看当前系统上root用户的所有信息;
                  grep '\<root\>' /etc/passwd
    9、添加用户bash和testbash、basher,而后找出当前系统上其用户名和默认shell相同的用户;

                     grep '^\([[:alpha:]]\{1\}\.*\1$'  /etc/passwd

    10、找出netstat -tan命令执行的结果中以“LISTEN”或“ESTABLISHED”结尾的行;
                  netstat -tan |egrep 'LISTEN|ESTABLISHED[[:space:]]\{1,\}$'
    11、取出当前系统上所有用户的shell,要求:每种shell只显示一次,且按升序显示;

                                     cat /etc/passwd |cut -d: -f7 | sort -u


你可能感兴趣的:(命令,grep,*nix)