[root@localhost ~]# mkdir grep [root@localhost ~]# cd grep/ [root@localhost grep]# cp /etc/passwd . [root@localhost grep]# ls passwd [root@localhost grep]# pwd /root/grep [root@localhost grep]# grep 'nologin' 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 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 等等等,只截取了一部分 [root@localhost grep]# which grep alias grep='grep --color=auto' /usr/bin/grep
[root@localhost grep]# /usr/bin/grep 'nologin' 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 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 等等等,只截取了一部分 [root@localhost grep]#
[root@localhost grep]# grep -c 'nologin' passwd 15 [root@localhost grep]#
[root@localhost grep]# grep -n 'nologin' passwd 2:bin:x:1:1:bin:/bin:/sbin/nologin 3:daemon:x:2:2:daemon:/sbin:/sbin/nologin 4:adm:x:3:4:adm:/var/adm:/sbin/nologin 5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 等等等,只截取了一部分
会在最左侧绿色的数字显示行号
[root@localhost grep]# grep -nv 'nologin' passwd //会显示除了nologin的那些行 1:root:x:0:0:root:/root:/bin/bash 6:sync:x:5:0:sync:/sbin:/bin/sync 7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 8:halt:x:7:0:halt:/sbin:/sbin/halt
[root@localhost grep]# grep -r 'root' /etc/ //会匹配etc目录下全部带root的文件 /etc/pki/ca-trust/extracted/README:root CA certificates. /etc/pki/ca-trust/extracted/java/README:root CA certificates. /etc/pki/ca-trust/extracted/openssl/README:root CA certificates.
[root@localhost grep]# grep 'root' /etc/ grep: /etc/: 是一个目录 [root@localhost grep]#
[root@localhost grep]# grep 'root' /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin [root@localhost grep]#
[root@localhost grep]# grep -A2 'root' 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 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin [root@localhost grep]# grep -nA2 'root' passwd //显示passwd文件中的root行的下面两行,并显示行号 1:root:x:0:0:root:/root:/bin/bash 2-bin:x:1:1:bin:/bin:/sbin/nologin 3-daemon:x:2:2:daemon:/sbin:/sbin/nologin -- 10:operator:x:11:0:operator:/root:/sbin/nologin 11-games:x:12:100:games:/usr/games:/sbin/nologin 12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin [root@localhost grep]#
[root@localhost grep]# grep -nB2 'root' passwd 1:root:x:0:0:root:/root:/bin/bash -- 8-halt:x:7:0:halt:/sbin:/sbin/halt 9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10:operator:x:11:0:operator:/root:/sbin/nologin [root@localhost grep]#
[root@localhost grep]# grep -nC2 'root' passwd 1:root:x:0:0:root:/root:/bin/bash 2-bin:x:1:1:bin:/bin:/sbin/nologin 3-daemon:x:2:2:daemon:/sbin:/sbin/nologin -- 8-halt:x:7:0:halt:/sbin:/sbin/halt 9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10:operator:x:11:0:operator:/root:/sbin/nologin 11-games:x:12:100:games:/usr/games:/sbin/nologin 12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin [root@localhost grep]#
[root@hf-01 grep]# grep '[0-9]' passwd //过滤出全部带数字的行 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin mysql:x:1000:1000::/home/mysql:/bin/bash 等等,只截取了一部分 [root@hf-01 grep]#
[root@hf-01 grep]# grep -v '[0-9]' /etc/passwd [root@hf-01 grep]#
[root@hf-01 grep]# cp /etc/inittab ./ //不能直接改动,由于/etc/inittab是系统开机配置问件 [root@hf-01 grep]# vim inittab [root@hf-01 grep]# grep -nv '^#' inittab 5:fadfdfasfas 7:113465142111 12:%$#@$#*&^$%$#
[root@hf-01 grep]# grep -v '^#' inittab|grep -v '^1' fadfdfasfas %$#@$#*&^$%$# [root@hf-01 grep]# grep -v '^#' inittab|grep -v '^f' 113465142111 %$#@$#*&^$%$# [root@hf-01 grep]# grep -v '^#' inittab|grep -v '^%' fadfdfasfas 113465142111 在第一次取反 加入-n ,会把显示的行号默认成内容 [root@hf-01 grep]# grep -nv '^#' inittab|grep -nv '^1' 1:5:fadfdfasfas 2:7:113465142111 在第二次取反的时候,加-n参数,会看到显示的行号新的星号 这是由于第二次取反会把第一次取反后得出的结果,输入到第二次取反(默认是一个新文件) [root@hf-01 grep]# grep -v '^#' inittab |grep -nv '^1' 1:fadfdfasfas 3:%$#@$#*&^$%$# [root@hf-01 grep]# grep -v '^#' inittab|grep -nv '^%' 1:fadfdfasfas 2:113465142111
- 取反总结:
- 加 -n 参数 在两次(或屡次)取反的时候,只能在最后一次取反加 -n 参数,由于取反的时候,会把列出的行号被默认成文件内容,因此取反的时候慎用 -n参数
[root@hf-01 grep]# grep '[^0-9]' inittab # inittab is no longer used when using systemd. # fadfdfasfas # multi-user.target: analogous to runlevel 3 %$#@$#*&^$%$# 等等等,只截取了一部分
[root@hf-01 grep]# grep -v '[^0-9]' inittab 113465142111
[root@hf-01 grep]# grep '^[^0-9]' inittab # inittab is no longer used when using systemd. # fadfdfasfas # multi-user.target: analogous to runlevel 3 %$#@$#*&^$%$# # graphical.target: analogous to runlevel 5 # 等等等,只截取了一部分
[root@hf-01 grep]# grep -nv '^[^0-9]' inittab 7:113465142111
- 总结: 符号 ^ 表示以什么什么开头
- 若放在方括号里面去 [^0-9] 就表示这个方括号里面的反义,取非 的意思
- 若^符号放在[] 方括号外面 ^[^0-9] 表示以什么什么开头
[root@hf-01 grep]# grep 'r.o' passwd //会匹配出包含ro的字符,其中的点表示任意一个字符 [root@hf-01 grep]# grep 'r.o' passwd root:x:0:0:root:/root:/bin/bash adas:124:bdsf:rto:pass halt:x:7:0:halt:/r.o:/sbin/halt operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost grep]# grep 'h*n' inittab # inittab is no longer used when using systemd. hhhhan haaaaannnn wannnnnnn # Ctrl-Alt-Delete is handled by /etc/systemd/system/ctrl-alt-del.target # systemd uses 'targets' instead of runlevels. By default, there are two main targets: # multi-user.target: analogous to runlevel 3 # graphical.target: analogous to runlevel 5 # To set a default target, run: # ln -sf /lib/systemd/system/<target name>.target /etc/systemd/system/default.target [root@hf-01 grep]#
总结grep 'hn' passwd 过滤的时候,跟号前面的字符相关,能够是0个或多个,跟后面的字符没有什么关系,如果在一行中无 h 而有 n 也会匹配出来(这就表示0个h)php
[root@localhost grep]# grep '# inittab.*' inittab # inittab is no longer used when using systemd.
[root@localhost grep]# grep 'h\{2\}' inittab hhhhan [root@localhost grep]#
[root@localhost grep]# grep 'h\{0,4\}' inittab //匹配文件中h出现0到4次的都会匹配出来 # inittab is no longer used when using systemd. hhhhan haaaaannnn wannnnnnn waaaaaal # Ctrl-Alt-Delete is handled by /etc/systemd/system/ctrl-alt-del.target # 等等等,只截取了一部分
[root@localhost grep]# grep -E 'h{2}' inittab hhhhan
[root@localhost grep]# egrep 'h{2}' inittab hhhhan [root@localhost grep]#
[root@localhost grep]# grep -E '(hh){2}' inittab //表示连续的hh出现两次匹配打印出来 hhhhan
[root@localhost grep]# egrep '(hh){2}' inittab hhhhan
grep -E等于egrep命令,如果在连续匹配字符的时候,不使用 grep -E或 egrep 命令,只使用grep命令,其中的符号则须要脱义。java
[root@localhost grep]# egrep 'h+h' inittab hhhhan [root@localhost grep]# egrep 'h+a' inittab hhhhan haaaaannnn # Ctrl-Alt-Delete is handled by /etc/systemd/system/ctrl-alt-del.target [root@localhost grep]#
[root@localhost grep]# egrep 'h?1f' inittab //匹配h和1f字符,若文件没有h字符,则匹配1f字符 h1f:gfdgfg hghjhk:1f:hjjkuhhj [root@localhost grep]#
[root@localhost grep]# egrep 'h|1f' inittab # inittab is no longer used when using systemd. hhhhan haaaaannnn h1f:gfdgfg hghjhk:1f:hjjkuhhj # Ctrl-Alt-Delete is handled by /etc/systemd/system/ctrl-alt-del.target # systemd uses 'targets' instead of runlevels. By default, there are two main targets: # graphical.target: analogous to runlevel 5 [root@localhost grep]#