linux基础之grep训练

grep [OPTIONS] PATTERN [FILE...] 
    选项:
        --color=auto: 对匹配到的文本着色显示
        -v : 显示不能够被pattern匹配到的行
        -i : 忽略字符大小写
        -o : 仅显示匹配到的单词
        -q: 静默模式,不输出任何消息
        -A # :after, 后#行
        -B # :before,前#行
        -C # : context, 前后各#行
        -E ; 使用扩展的正则表达式
 
     grep练习:
    1. 显示/proc/meminfo 文件中以大小写s开头的行:(要求: 使用两种方式)
        # grep "^[sS]" /proc/meninfo
        # grep -i "^s" /proc/meminfo
 
    2. 显示/etc/passwd文件中不以/bin/bash结尾的行
        # grep -v "/bin/bash$" /etc/passwd
 
    3. 显示/etc/passwd 文件中ID号最大的用户的用户名
        # sort -t: -k 3 -n /etc/passwd | tail -1 | cut -d: -f1
 
    4.如果用户root存在,显示其默认的shell程序
        # grep "^root\>" /etc/passwd &> /dev/null | cut -d: -f7
        # id root &> /dev/null && grep "^root\>" /etc/passwd | cut -d: -f7
 
    5. 找出/etc/passwd中的两位或三位数
        # grep -o "\<[0-9]\{2,3\}\>" /etc/passwd
 
    6.显示/etc/rc.d/rc.sysinit文件中,至少以一个空白字符开头的且后面存在非空白字符的行
        # grep "^[[:space:]].*[^[:space:]].*" 
        # grep "^\([[:space:]]\).*[^\1].*"  
        # grep "^[[:space:]]"\+[^[:space:]]
 
    7.找出netstat -tan 命令的结果中以 LISTEN 后跟0、1或多个空白字符结尾的行
        # netstat -tan | grep "LISTEN[[:SPACE:]]*$"
 
    8.添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin):而后找出/etc/passwd文件中用户名同shell名的行
        # useradd -s /sbin/nologin nologin
        # useradd bash
        # grep "^\([[:alnum:]]\+\>\).*\1$" /etc/passwd
 
    9. 写一个脚本,实现如下功能
        如果user1用户存在,就显示其存在,否则添加之
        显示添加的用户的id号等信息
        #!/bin/bash
        id user1 &> /dev/null && echo "user1已存在" || useradd user1
        id user1
 
    10. 写一个脚本,完成如下功能
        如果root用户登录了当前系统,就显示root用户在线,否则说明其未登录
        #!/bin/bash
        w | grep "^root\>" &> /dev/null && echo "root logged" || echo "root not logged"
 
        egrep = grep -E
    egrep [OPTIONS] PATTERN [FILE...]
           egrep练习:
        1.显示当前系统root、centos或user1用户的默认shell和UID
            # egrep "^root|centos|user1\>" /etc/passwd | cut -d: -f3,7
 
        2.找出/etc/rc.d/init.d/functions文件(centos6)中某单词后面跟一个小括号的行
            # egrep -o "^[_[:alnum:]]+\(\)" /etc/rc.d/init.d/functions
 
        3.使用echo输出一绝对路径,使用egrep取出其基名
            # echo "/etc/rc.d/init.d/functions" | egrep -o "[^\/]+" | tail -1
 
           进一步:使用egrep取出路径的目录名,类似于dirname命令的结果
            # echo "/tmp/init.d/function/base.txt" | egrep "(\/).*\1\b"
 
        4.找出ifconfig命令结果中1-255之间的数值
            # ifconfig | egrep  "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"

 

posted @ 2021-10-26 18:06  不积硅步,无以至千里  阅读(132)  评论(0编辑  收藏  举报