正则表达式和工具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\} #匹配字符an次
  • 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}’ . #此三个匹配内容是一样的

posted on 2017-11-21 07:49  游荡的鱼  阅读(201)  评论(0编辑  收藏  举报

导航