什么是正则:
1. 正则就是一串有规律的字符串: 它使用单个字符串来描述或匹配一系列符合某个句法规则的字符串。
2. 掌握好正则对于编写shell脚本有很大帮助
3. 各种编程语言中都有正则,原理都是一样的
4. 本章将要学习grep/egrep、sed、awk
9.1 grep 工具
grep [-cinvABC] 'word' filename 过滤的意思。
1. -c 表示打印符合要求的行数
2. -i 表示忽略大小写
3. -n 表示输出符合要求的行及其行号
4. -v 表示打印不符合要求的行
5. -r 遍历所有子目录
6.-A 后面跟一个数字(有无空格都可以),例如:-A2 表示打印符合要求的行以及下面的两行。
7.-B 后面跟一个数字,例如 -B2 表示打印符合要求的行以及上面的两行。
8. -C 后面跟一个数字,例如: -C2 表示打印服务要求的行以及上下各两行。
在root 下建立一个grep . 把etc/passwod 文件拷贝到 grep 目录下。然后过滤登录状态为"nologin" 的账号。
grep 文件自带颜色属性。
统计行数和显示行号
不区分大小写。
这儿加上V,把非nologin的所有行显示出来。
grep (中)
方括号中任意一个字符,满足0-9 这个套件,就会被刷选出来。
列出不带数字的行。
注意点: 在文件中显示行号的命令是:set nu 如下图:
筛选出以#开头的行。
把不以#开头的行打印出来。
中括号的应用:如果是数字就用[0-9]这样的形式(当遇到类似[15]的形式时,表示只含有1或者5)。
如果要过滤数字以及大小写字母,则要写成类似[0-9a-zA-z]的形式。
[^字符]表示除[ ]内字符之外的字符。
9.3 grep(下)
. 表示任意一个字符。r.o 表示把r与o之间有一个任意字符的行过滤出来。
* 表示零个或多个* 前面的字符。下图,凡是有o的都被筛选出来了。
组合 '.*' 表示把所有的字符都显示出来。
egrep 扩展grep 的写法
在正则表达式中,{ } 内部为数字,表示前面的字符要重复的词数。下图,表示o字符会出现两次。
{ } 可以表示一个范围,具体格式{n1,n2}.
下面的写法等同于egrep 的功能。
下图显示两次oo 的效果。
+ 表示匹配1个或多个+前面的字符。+ 没有零次的意思,有多次的意思。而* 有零次或多次的意思。
? 表示?前面的字符要么显示1次,要么零个。o?t 要么显示o, 要么不显示0,直接显示t.
| 表示|前后的字符串都能够匹配
不区分大小写。加上i.