9.1 正则介绍_grep(上)
正则就是一串有规律的字符串
掌握正则对于编写shell脚本有很大帮助
各种编程语言中都有正则,原理是一样的
三剑客:grep/egrep、sed、awk
grep [-cinvABC] 'word'
"-n":显示行号。在文件中本身的行号
“-i”:不区分大小写
“-c”:行数
"-v":取反
"-r":遍历所有子目录 // ~] # grep -r 'root' /etc/。所有子目录文件中包含root字符的行,及其所在文件
-
[root@localhost grep]# grep -r 'root' /etc/ | grep passwd
-
/etc/passwd:root:x:0:0:root:/root:/bin/bash
-
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
-
/etc/passwd-:root:x:0:0:root:/root:/bin/bash
-
/etc/passwd-:operator:x:11:0:operator:/root:/sbin/nologin
-
/etc/postfix/main.cf:# the system passwd file in the chroot jail is just not practical.
“-A”:后面跟数字,过滤出符合要求的行,以及下面n行
"-B":
后面跟数字,过滤出符合要求的行,以及上面n行
“-C”:
后面跟数字,过滤出符合要求的行,以及上下各n行
-
[root@localhost ~]# mkdir grep
-
[root@localhost ~]#
-
[root@localhost ~]# cd grep/
-
[root@localhost grep]# cp /etc/passwd ./
-
[root@localhost grep]#
-
[root@localhost grep]# ls
-
passwd
-
[root@localhost grep]# grep 'nologin' passwd
-
bin:x:1:1:bin:/bin:/sbin/nologin
-
......
-
[root@localhost grep]# which grep
-
alias grep='grep --color=auto'
-
/usr/bin/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 -B2 'root' passwd
-
root:x:0:0:root:/root:/bin/bash
-
--
-
halt:x:7:0:halt:/sbin:/sbin/halt
-
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
-
operator:x:11:0:operator:/root:/sbin/nologin
-
[root@localhost grep]# grep -C2 '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
-
--
-
halt:x:7:0:halt:/sbin:/sbin/halt
-
mail:x:8:12:mail:/var/spool/mail:/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
9.2 grep(中)
grep的正则使用:
-
[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
-
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
-
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
-
nobody:x:99:99:Nobody:/:/sbin/nologin
-
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
-
dbus:x:81:81:System message bus:/:/sbin/nologin
-
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
-
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
-
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
[root@localhost ~]# grep -v '^#' a.txt | grep -v '^$' //过滤不以 # 开头并且不为空的行。
9.3 grep(下)
-
[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*' passwd //星号左边的符号出现任意多次。一个r会被匹配到,ro会被匹配到,roooo...也会被匹配。“ .* ”代表匹配所有
-
root:x:0:0:root:/root:/bin/bash
-
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
-
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
-
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
明确匹配次数的表示:
grep需要使用脱义字符来将“{}”进行脱义。如果不想使用“\”来进行脱义,可以使用egrep。也可以是一个范围 ]# grep 'o\{0,3\}' passwd 。范围:0-3次都匹配。
阅读(1016) | 评论(0) | 转发(0) |