grep及正则表达式
grep及正则表达式 grep: [root@MyServer~]#greproot/etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin [root@MyServer~]#grep--color=autoroot/etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin [root@MyServer~]#grep-vroot/etc/passwd bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin gopher:x:13:30:gopher:/var/gopher:/sbin/nologin ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin vcsa:x:69:69:virtualconsolememoryowner:/dev:/sbin/nologin saslauth:x:499:499:"Saslauthduser":/var/empty/saslauth:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separatedSSH:/var/empty/sshd:/sbin/nologin -i忽略大小写 [root@MyServer~]#grep-oroot/etc/passwd root root root root [root@MyServer~]#grep-qroot/etc/passwd [root@MyServer~]#echo$? 0 [root@MyServer~]#grep-qxxxxxxxxxx/etc/passwd [root@MyServer~]#echo$? 1 一个匹配到,一个没有匹配到 [root@MyServer~]#grep-A2root/etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin -- operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin gopher:x:13:30:gopher:/var/gopher:/sbin/nologin -B 2表示匹配的行及前2行 [root@MyServer~]#grep-B2root/etc/passwd root:x:0:0:root:/root:/bin/bash -- mail:x:8:12:mail:/var/spool/mail:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin -C 2表示匹配的行及其的前和后的各2行 [root@MyServer~]#grep-C2root/etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin -- mail:x:8:12:mail:/var/spool/mail:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
[root@MyServer~]#grep's..n'/etc/passwd bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin gopher:x:13:30:gopher:/var/gopher:/sbin/nologin ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin vcsa:x:69:69:virtualconsolememoryowner:/dev:/sbin/nologin saslauth:x:499:499:"Saslauthduser":/var/empty/saslauth:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separatedSSH:/var/empty/sshd:/sbin/nologin [root@MyServer~]#cataa.txt abxy xay xxxy xxaay aaaa [root@MyServer~]#grepx*yaa.txt abxy xay xxxy xxaay 贪婪模式 [root@MyServer~]#cataa.txt abxy xay xxxy xxaay aaaa [root@MyServer~]#grepx.*yaa.txt abxy xay xxxy xxaay ?:匹配其前面的字符0或1次;即前面的可有可无; [root@MyServer~]#grep--color=autox*yaa.txt abxy xay xxxy xxaay 位置锚定: ^:行首锚定;用于模式的最左侧; $:行尾锚定;用于模式的最右侧; ^PATTERN$: 用于模式匹配整行; ^$: 空行; ^[[:space:]]*$ &; 或 b:词首锚定;用于单词模式的左侧; &; 或 b:词尾锚定;用于单词模式的右侧; &;PATTERN&;:匹配整个单词; 分组: ():将一个或多个字符捆绑在一起,当作一个整体进行处理; (xy)*ab Note: 分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: 1,2,3,... 1: 从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符; (ab+(xy)*): 1: ab+(xy)* 2: xy 后向引用:引用前面的分组括号中的模式所匹配字符,(而非模式本身) 练习: 1、显示/proc/meminfo文件中以大小s开头的行;(要求:使用两种方式) grep -i '^s' /proc/meminfo 2、显示/etc/passwd文件中不以/bin/bash结尾的行; grep '/bin/bash$' /etc/passwd grep -v '/bin/bash$' /etc/passwd 3、显示/etc/passwd文件中ID号最大的用户的用户名; sort -t: -k3 -n /etc/passwd | tail -l | cut -d: -f1 4、如果用户root存在,显示其默认的shell程序; # id root &> /dev/null && grep "^root&;" /etc/passwd | cut -d: -f7 5、找出/etc/passwd中的两位或三位数; # grep "&;[0-9]{2,3}&;" /etc/passwd 6、显示/etc/rc.d/rc.sysinit文件中,至少以一个空白字符开头的且后面存非空白字符的行; # grep "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg 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 # grep "^([[:alnum:]]+&;).*1$" /etc/passwd 练习: 1、写一个脚本,实现如下功能 如果user1用户存在,就显示其存在,否则添加之; 显示添加的用户的id号等信息; #!/bin/bash id user1 &> /dev/null && echo "user1 exists." || useradd user1 id user1 2、写一个脚本,完成如下功能 如果root用户登录了当前系统,就显示root用户在线;否则说明其未登录; w | grep "^root&;" &> /dev/null && echo "root logged" || echo "no loggin" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |