正则介绍_grepshell
正则就是一串有规律的字符串编程
各类编程语言中都有正则,原理是同样的。编程语言
grep/egrep sed awk 是shell脚本“三剑客”server
grep (-c -i -n -v -r -A -B -C )字符串
-c 行数 -n 行号it
-i 不区分大小写awk
-v 取返原理
-r 把子目录和孙目录下面全部的文件遍历一遍sed
若是不加-r 配置
-A后边跟数字,过滤出符合要求的行以及下面n行
-B后边跟数字,过滤出符合要求的行以及上面n行
-c后边跟数字,过滤出符合要求的行以及上下各n行
grep/egrep示例
[root@serverlooker-01 grep]# grep '[0-9]' passwd
[0-9] 表示方括号里面的任意一个字符
[root@serverlooker-01 grep]# grep -v '[0-9]' passwd
只要带数字的都不要
(:set nu 加上行号,方便查看)
---
以#开头的行
[root@serverlooker-01 grep]# grep -n '^#' /etc/inittab
把文件拷贝到当前目录下 [root@serverlooker-01 grep]# cp /etc/inittab ./
改动一下当前目录下的inittab (不要改etc下的,可能会致使系统启动不了)
(把15行过滤出来了)
之后看能会看不少跟服务相关的配置文件,配置文件里会有不少以#开头的行,是为了解释说明,因此看起来可能会很乱,因此能够用这种方法过滤。
--
放到[ ] 里面,是方括号里面字符的反义,和放到外面是不同的。表示取 非
[root@serverlooker-01 grep]# grep '[^0-9]' inittab
以非数字开头的行,列出来
[root@serverlooker-01 grep]# grep '^[^0-9]' inittab
以数字开头的行:
---
. 表示任意的一个字符。
* 表示 :*左边的字符重复0-n次
.* 表示任意一个任意字符
[root@serverlooker-01 grep]# grep '.*' passwd
---
[root@serverlooker-01 grep]# grep '{2}' passwd
这样写不表示任何意义,就表示一个花括号。在正则当中{ }用来表示一个范围,真正的写法:
[root@serverlooker-01 grep]# grep 'o{2}' passwd 表示o出现2次,但直接这样写不识别,须要作一个脱义:[root@serverlooker-01 grep]# grep 'o\{2\}' passwd
还能够表示一个范围: ({}表示前面这个字符的重复范围)
若是不想写\,能够用egrep 或者grep -E
表示一个总体:
+ 表示+前面这个字符的1次或者屡次,(*是0次或屡次)
[root@serverlooker-01 grep]# grep 'o\+o' passwd
?表示 ?前面字符的0次或1次重复
| 表示或者,能够写多个
---
以下这些特别重要:
.
*
.*
+
?
^
$
---
OK.