正则表达式和工具grep的应用
正则
正则表达式的组成
- 一般字符
- 特殊字符(meta字符):元字符,有在正则表达式中有特殊意义
1、BRE:基本正则表达式
2、ERE:扩展正则表达式
通配符
*
#匹配0个或任意多个字符,匹配任意字符相当于基础正则里的“.*”?
#匹配任意一个字符[]
#匹配“[]”中任意一个字符[-]
#匹配括号中任意一个字符,“-”代表范围”[A-Z]“ ”[a-z]“[^]
#逻辑非,表示匹配不是中括号内的一个字符,[^0-9],匹配非数字
BRE 基础正则表达式
*
#前一个字符匹配0此或任意多次.
#匹配除了换行符意外的任意一个字符,一次,".*"
匹配所有内容^
#匹配字符串头部$
#匹配字符串尾部\[\]
#匹配中括号中字符一次,[A]
匹配字符“A”一次[A,B]
匹配字符”A”或者’B’一次\[^x\]
#匹配字符“x”以外的字符\
#转意字符如上面的中括号,在grep中可以加-E
参数或者使用egrep就不用转意字符a\{n\}
#匹配字符a
n次a\{2,\}
#匹配字符“a”出现不小于2次a\{2,5\}
#匹配字符“a”出现次数为2-5次
扩展正则表达式
|
#管道符,表示“或”,“abc|hell” 匹配“abc”或者”hell”()
#小括号,可以讲正则字符和元字符或表达式进行组合”(abc)|(hell)s”
匹配”abcs”或者”hells”?
#问号,匹配0个或者1个前表达式(或字符,字符串),“(ab)?”匹配“ab”\<
#反斜杠+小于号,词首定位符, “\< abc”表示所有包含以”abc”开头的单词的行\>
#反斜杠+大于号,词尾定位符, “>abc”表示所有包含以”abc”结尾的单词的行-
#减号,用于指明字符范围, “[a-c]”将匹配包含a、b和c中任意一个字符的字符串+
# 加号,匹配一个或多个前导表达式,相当于 expr{1,}, 与”?”不同的是至少匹配一次“?”可以匹配0次
工具:
- grep
- egrep #grep 的扩展
- sed
- awk
grep
option:
grep [-cinvABC] ‘word’ filename
-c
#统计匹配到的总行数-i
#不区分大小写-n
#显示行号-r
#递归 目的可以写文件夹,递归里面所有的文件-v
#取反过滤-An
#列出匹配到的行以及下n行-Bn
#列出匹配到的行以及上n行-
-Cn
#列出匹配到的行以及上下n行 -
grep -rn ‘root’ . #递归匹配本目录下的 有‘root’字符的行,并打印行号,
[test@xujb01 exmple]$ grep -rn root .
./a.txt:1:#123 root example
./a.txt:2:test 123 root
./test/2:1:#123 root example
./test/2:2:test 123 root
./b:1:#123 root example
./b:2:test 123 root
./1a:1:#123 root example
./1a:2:test 123 root
./1:1:#123 root example
./1:2:test 123 root
./3:1:#123 root example
./3:2:test 123 root
- grep -rn —include=”[0-9]” . #
--include
对文件进行匹配过滤
[test@xujb01 exmple]$ grep -rn --include="[0-9]" 'root' .
./test/2:1:#123 root example
./test/2:2:test 123 root
./1:1:#123 root example
./1:2:test 123 root
./3:1:#123 root example
./3:2:test 123 root
- grep -r ‘o{2}‘ .
- grep -r -E ‘o{2}’ . #-E就是启用扩展egrep
- egrep -r ‘0{2}’ . #此三个匹配内容是一样的