9.1 正则介绍
正则就是一串有规律的字符串(包括特殊字符)
掌握好正则对于编写shell脚本有很大帮助
各种编程语言中都有正则,原理是一样的
本章学习grep/egrep(grep的扩展)、sed、awk
grep
gerp[-cinvABC]'word'filename
-c 行数 -i不区分大小写 -v 取反 -r 遍历所有子目录
-A 后面跟数字,过滤符合要求的行以及下面的n行
-B 同上,过滤出符合要求的行以及上面n行
-C 同上,过滤出符合要求的行以及上下各n行
grep 'nologin' passwd 将过滤字符带颜色显示
grep -c 'nologin' passwd // -c显示行号
grep -n 'nologin' passwd //-n显示行数
grep -i 'nologin' passwd //-i 不区分大小写
grep -v 'nologin' passwd //-v 取反
grep -r 'nologin' passwd //-r 遍历所有子目录
grep -A2 'root' passwd
grep -B2 'root' passwd
grep -C2 'root' passwd
9.2grep(中)
gerp '[0-9]' passwd // 输出的结果全部包含 0-9 的数字,[ ] 表示一个范围 见下图
gerp-v '[0-9]' passwd // -v 选项来查看没有包含数字的结果
gerp '^#' passwd //^表示以后面跟的内容开头,见下图例子
gerp '[^0-9]' passwd // [^0-9] 表示的是非 0-9 的一个字符
gerp '^[^0-9]' passwd //表示已分数字开头的行
^ 的作用,把 ^ 放在 [ ] 里面,表示取反,非的意思。放在 [ ] 外面就是以后面的内容开头
9.3 grep(下)
grep 'r.o' passwd // . 代表任意的一个字符 ,
grep 'o*o' passwd // * 右边的字符表示需要匹配的内容,左边的字符表示重复 0-n 次,n 是一个随意的数字。
grep '.*' passwd //表示任意的任意字符,0个也可以
grep 'o\{2\}' passwd //{ } ,\ (脱义符号)把它原本的含义去掉,{ } 花括号表示的是一个范围
egrep 'o{2}' passwd \ (脱义符号)看着不舒服的话,可以使用 egrep 命令,这样就不需要用到 \ (脱义符号)了
grep 'o\+o' passwd //表示+号前面字符的1次或多次,它与 (星号)的差别在于,(星号)表示的是 0 次或多次
egrep 'o+o' passwd
grep '0\?o' passwd //表示 ?号前面字符的重复次数为0次或1次
grep -E 'root|nologin' passwd //表示或者的意思
. 表示任意一个字符
* 表示0个或多个前面的字符 . * 表示通配 { } 表示前面字符的范围+ 表示1个或多个前面的字符
?表示0个或1个前面的字符 | 表示或者 ^ 表示以后面跟的内容开头 [ ] 表示一个范围 [^ ] 表示取反,就是非的意思