grep 是linux下强大的文本搜索工具

    grep: (global search regular expression(RE) and print out the line

 

原理:根据用户指定的文本模式,对文本进行一行一行的搜索,显示被模式所匹配到的行。

            grep 可以使用正则表达式,来进行模式匹配

 

格式:grep [options]  'PATTERN'   file,...

    注意:PATTERN中如果没有变量等特殊意思的字符建议使用 单引号 '  ' ,否则使用双引号 "  "

 

常用选项:
        -v: 反向,显示不能被模式所匹配到的行;
        -o:仅显示被模式匹配到的字串,而非整行;
        -i: 不区分字符大小写, ignore-case
        -E:支持扩展的正则表达式
        -A #:  显示匹配到的行,附加显示匹配到的   下第#行
        -B #:  显示匹配到的行,附加显示匹配到的    上#行
        -C #:  显示匹配到的行,附加显示匹配到的    上下#行

        --color=auto :让匹配到的文本以颜色显示

 

 


示例:

1、显示/proc/meminfo文件中以大小写s开头的行; 

    # grep -i '^s'  /proc/meminfo    # -i 意思是不区分大小写
    # grep '^[sS]'  /proc/meminfo    # [] 中括号表示取字符集中的其中一个

2、取出默认shell为非bash的用户;

     # grep 'bash$' /etc/passwd     # linux中文本默认以$为结束符

3、取出默认shell为bash的且其ID号最大的用户;

    # grep 'bash$'  /etc/passwd | sort -n -t: -k3 | tail -1 | cut -d: -f1

4、显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;        

    # grep '^#[[:space:]]\{1,\}[^[:space:]\{1,\}'   /etc/rc.d/sysinit

5、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;

    # grep '^[[:space:]]\{1,\}'   /boot/grub/grub.conf

6、找出/etc/passwd文件中一位数或两位数;

    # grep '\<[0-9]\{1,2\}\>'   /etc/passwd  #其中一对尖括是用来锚定的,
                    要不然像1234,这样的数也会匹配到的,题目中明确1位或2位

7、找出ifconfig命令结果中的1到255之间的整数;

    # ifconfig | grep -E --color=auto "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"

8、查看当前系统上root用户的所有信息;

    grep '^root\>'  /etc/passwd

9、添加用户bash和testbash、basher,而后找出当前系统上其用户名和默认shell相同的用户;

    # useradd bash ;useradd testbash; useradd basher     # 多个命令用分号隔开
    # grep '^\([[:alnum:]]\{1,\}\).*\1$'  /etc/passwd

10、找出netstat -tan命令执行的结果中以“LISTEN”或“ESTABLISHED”结尾的行;

    # netstat -tan | grep -E --color=auto '(LISTEN|ESTABLISHED)[[:space:]]*$'

11、取出当前系统上所有用户的shell,要求:每种shell只显示一次,且按升序显示;

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