正则_grep
一、正则介绍
- 正则就是一串有规律的字符串,包括各种特殊符号
- 掌握正则对于编写shell有很大帮助
- 各种编程中都有正则,原理是一样的
二、grep
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
-
grep用法
grep [-cinvrABC] 'word' filename
参数说明:
|参数|说明| |---|---| |-c|统计| |-n|显示行| |-i|不区分大小写| |-r|遍历所有的子目录| |-v|取反| |-A|后面跟数字,过滤出符合要求的行及下面n行| |-B|后面跟数字,过滤出符合要求的行及上面n行| |-C|后面跟数字,过滤出符合要求的行及上下n行|
-
常用示例
1、匹配字符并显示行号
grep -n "root" /etc/passwd
2、匹配非"root"行并显示行号
grep -vn "root" /etc/passwd
3、匹配“root”行,并显示下面两行。
grep -A2 -n 'root' /etc/passwd
4、匹配“root”行,并显示上面两行
grep -B2 -n 'root' /etc/passwd
5、匹配“root”行,并显示上下两行。
grep -C2 -n 'root' /etc/passwd
6、区分不大小写显示
grep -i "A" 1.txt
7、遍历所有子目录匹配
查找root目录下所有包含“root”的文件并显示出来
grep -r "root" /root/
-
grep正则操作
1、匹配带数字的行
grep [0-9] /etc/passwd
[0-9]就是0到9的意思
2、匹配以非“#”开头的行
grep -v '^#' 1.txt
3、匹配所有非数字
grep '[^0-9]' 2.txt
把^符号放在[]中就是非的意思。
4、匹配所有非数字开头的行
grep '^[^0-9]' 2.txt
5、匹配所有“rxot”的行,”"."代表任意一个字符
grep "ro.t" 1.txt
6、多个字母匹配
grep 'o*o' passwd
""代表左边的字符重复0-n次,也就是一个o也会匹配,ooo....多个也会匹配
7、贪婪匹配
grep '.*' 1.txt
"."表示贪婪匹配,所有的都会被匹配。“.”表示一个任意字符,“”代表*左边的字符重复0-n次,加在一起就是匹配所有的就叫贪婪匹配。
8、指定字符出现次数匹配
grep 'o\{2\}' 1.txt
{2}表示出现的次数,o是指指定的字符。\表示脱意
-
egrep
在grep中使用+ {} () | 需要时\进行脱意。不想脱意可以使用 egrep 或者 grep -E
-
其它一些符号使用
示例:
1、()组合字符
egrep '(oo){2}' 1.txt
()表示组合的意思
2、“+”匹配
+类似于*,不同的是+是1-n次,*是0-n次,如下图单个o不会被匹配到
3、“?”匹配
?表示左边字符的重复次数为0或者1
grep 'o\?t' 1.txt
4、 “|” 符号或者匹配
'|'表示或者,比如root|tes就是匹配‘root’或者‘test’的意思
grep -E 'root|test' 1.txt
-
扩展
过滤一个目录下所有*.php文档中含有eval的行。
grep -r --include "*.php" 'eval' /usr/local/php/