正则_9
grep_1&2&3
什么是正则
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。
正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。许多程序设计语言都支持利用正则表达式进行字符串操作。
grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
正则就是一串又规律的字符串
掌握好正则对于编写shell脚本有很大帮助
各种编程语言中都有正则,原理是一样的
本章将要需欸写grep/egrep、sed、awk
grep
选项
grep [-cinvABC] 'word' filename
[root@zyshanlinux-01 grep]# grep 'nologin' passwd bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin
-c或--count 行数
[root@zyshanlinux-01 grep]# grep -c 'nologin' passwd 16
-i或--ignore-case 不区分大小写,非常耗费时间尽量不用。
[root@zyshanlinux-01 grep]# grep -n 'nologin' passwd 3:daemon:x:2:2:daemon:/sbin:/sbin/nologin 4:adm:x:3:4:adm:/var/adm:/sbin/nologin [root@zyshanlinux-01 grep]# grep -in 'nologin' passwd 2:bin:x:1:1:bin:/bin:/sbin/Nologin 3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
-n或--line-number显示行号
[root@zyshanlinux-01 grep]# grep -n 'nologin' passwd 2:bin:x:1:1:bin:/bin:/sbin/nologin 3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
-v或--revert-match取反
[root@zyshanlinux-01 grep]# grep -ivn 'nologin' passwd 1:root:x:0:0:root:/root:/bin/bash 6:sync:x:5:0:sync:/sbin:/bin/sync
-r或--recursive遍历所有子目录
[root@zyshanlinux-01 ~]# grep -r 'root' /etc/ [root@zyshanlinux-01 ~]# grep 'root' /etc/ grep: /etc/: 是一个目录
-A后面跟数字,过滤处符合要求的行以及下面n行
[root@zyshanlinux-01 grep]# grep -nA2 '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 -- 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
-B同上,过滤处符合要求的行以及上面n行
[root@zyshanlinux-01 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
-C同上,同时过滤处符合要求的行以及上下各n行
[root@zyshanlinux-01 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
注:grep仅仅是实现正则的工具而已,并不是正则。
正则表达式grep/egrep示例
[root@zyshanlinux-01 grep]# grep '[0-9]' passwd
[root@zyshanlinux-01 grep]# grep -v '[0-9]' passwd
[root@zyshanlinux-01 grep]# grep -nv '^#' inittab ##在[]外面的^代表以什么开头
[root@zyshanlinux-01 grep]# grep -nv '^[^0-9]' inittab ##在[]里面的^代表非,[^0-9]代表非数字
[root@zyshanlinux-01 grep]# grep 'r.o' passwd ##r.o这个点代表任意一个字符
[root@zyshanlinux-01 grep]# grep 'o*o' passwd ##星号代表重复前面一个字符0次或多次
[root@zyshanlinux-01 grep]# grep 'zyshan.*bash' passwd ##点星匹配所有字符,包括空行
[root@zyshanlinux-01 grep]# grep 'o\{2\}' passwd ##要脱义,花括号里面的数字代表重复前面的字符次数,花括号必须脱义,不脱义就不会匹配,仅代表一个花括号而已
[root@zyshanlinux-01 grep]# egrep 'o{2}' passwd ##egrep不用脱义
[root@zyshanlinux-01 grep]# grep -E 'o{2}' passwd ##加-E也不用脱义
[root@zyshanlinux-01 grep]# grep -E '(oo){2}' passwd ##用圆括号代表一个整体,相当于是四个0
[root@zyshanlinux-01 grep]# grep 'o\+o' passwd ##需脱义,加号代表重复前面的字符1次或多次,没0次
[root@zyshanlinux-01 grep]# grep 'o?t' passwd ##问号代表重复前面字符0次或1次
[root@zyshanlinux-01 grep]# grep -E 'root|nologin|997|Bus' passwd ##竖线代表或者
sed_4&5
sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
选项
-n或--quiet或——silent:仅显示script处理后的结果;
-e
