本文共 7037 字,大约阅读时间需要 23 分钟。
什么是正则:一串有规律的字符串
grep:过滤指定关键词 格式:grep [-cinvABC] 'word' filename
-c 行数
-i 不区分大小写
-n 显示行号
-v 取反
-r 遍历所有子目录
-A 后面跟数字,过滤出符合要求的行以及下面n行
-B 后面跟数字,过滤符合要求的行以及上面的n行
-C 后面跟数字,同时过滤出符合要求的行以及上下各n行
实验
[root@localhost ~]# mkdir grep [root@localhost ~]# cd grep/ [root@localhost grep]# cp /etc/passwd . [root@localhost grep]# pwd /root/grep [root@localhost grep]# grep 'nologin' passwd #过滤nologin 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 [root@localhost grep]# grep -c 'nologin' passwd # 查看passwd 有多少行 -c 16 [root@localhost grep]# grep -n 'nologin' passwd # 查看nologin的行号 -n 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 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]# grep -i '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[root@localhost grep]# grep -v 'nologin' passwd #取反,打印除了nologin以外的行
root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/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 [root@localhost grep]##grep -r 'root' /etc/ #过滤root有关的所有子目录 -r
# grep 'root' /etc/ #不加r 会提示这是一个目录
[root@localhost grep]# grep 'root' /etc/ grep: /etc/: 是一个目录 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin [root@localhost grep]# grep -nA2 'root' passwd #过滤root并打印下面两行 -A 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]# grep -nB2 'root' passwd #过滤root并打印上面两行 -B
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]# grep -nC2 'root' passwd #过滤root并打印上下两行 -C 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/nologingrep 正则表达式
[root@localhost grep]# grep '[0-9]' 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 adm:x:3:4:adm:/var/adm:/sbin/nologin [root@localhost grep]# grep -nv '[0-9]' /etc/inittab #过滤出所有不包含数字的行 1:# inittab is no longer used when using systemd. 2:# 3:# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. 4:# [root@localhost grep]# grep -n '^#' /etc/inittab #过滤出所有带#号的行 1:# inittab is no longer used when using systemd. 2:# 3:# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. 4:# [root@localhost grep]# grep '[^0-9]' inittab #过滤出所有非数字的行 只要行中有字母都符合 # inittab is no longer used when using systemd. hdihsifwiehieiwhiwiihi # ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.[root@localhost grep]# grep '^[^0-9]' inittab #过滤出所有非数字开头的行
# inittab is no longer used when using systemd. hdihsifwiehieiwhiwiihi # ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. # # Ctrl-Alt-Delete is handled by /usr/lib/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 [root@localhost grep]# grep -vn '^[^0-9]' inittab #过滤相反的行 3: 12:[root@localhost grep]# grep 'r.o' passwd # . 点表示任意的一个字符
root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin[root@localhost grep]# grep 'ro*o' passwd #* 表示重复*前面的字符0次或是n次
root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin[root@localhost grep]# grep '.*' passwd # .* 表示匹配任意一个字符
root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/NOLoginooo daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/vaoooo/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[root@localhost grep]# grep 'sshd.*nologin' passwd # 用.*匹配一行
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin [root@localhost grep]# grep 'o\{2\}' passwd #{2} 表示出现2次0 但是要脱义\ root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/NOLoginooo lp:x:4:7:lp:/vaoooo/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin[root@localhost grep]# grep '0\{1,3\}' passwd # 表示一个范围 一个0 2个o 或是3个o
root:x:0:0:root:/root:/bin/bash sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt 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 avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin[root@localhost grep]# egrep -E '0{2}' passwd #表示出现2个o的情况 egrep是grep的扩展
games:x:12:100:games:/usr/games:/sbin/nologin [root@localhost grep]# grep -E '0{2}' passwd #表示出现2个o的情况 games:x:12:100:games:/usr/games:/sbin/nologin[root@localhost grep]# grep -E '(oo){2}' passwd #表示出现2次o的情况
lp:x:4:7:lp:/vaoooo/spool/lpd:/sbin/nologin[root@localhost grep]# egrep 'o+o' passwd #+表示+号前面的字符的1次或是多次
root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/NOLoginooo lp:x:4:7:lp:/vaoooo/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin[root@localhost grep]# egrep 'o?l' passwd #表示?前面的字符重复次数为0或1次
daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/vaoooo/spool/lpd:/sbin/nologin halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin[root@localhost grep]# grep -E 'root|nologin' passwd #|表示或者,这里匹配root 或者nologin
root:x:0:0:root:/root:/bin/bash daemon:x:2:2:daemon:/sbin:/sbin/nologin或
[root@localhost grep]# egrep 'root|nologin' passwd #|表示或者,这里匹配root 者nologin
root:x:0:0:root:/root:/bin/bash daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/vaoooo/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin[root@localhost ~]# grep -r --include="*.php" 'eval' /data/ #把一个目录下,过 滤所有*.php文档中含有eval的行
本文转自 yzllinux博客,原文链接: http://blog.51cto.com/12947851/2061332 如需转载请自行联系原作者