正则表达式很有用,特别是在处理文档,文本文件和代码时,结合grep,awk,sed,head,tail,less,more等命令,定位错误,提取关健信息很重要。
元字符,所谓的元字符,就是正则表达式的关键字,类似编程语言的关健字和运算符
这些关健字大致可以分为,
1.字符关健字,就是可以用来表示某一类字符的特殊字符,类似shell的通配符
一 . 点号,可以匹配除换行外的任意字符
二 \d 代表一个0到9的数字,也可以表示成0-9,\d更简捷,0-9更精确,方括号的好处是可以表示012等非0-9全集的数字,
三 \D 表示非数字,也可以表示为\^0-9,表示不包含0-9的字符集,
四 \w 匹配字母或数字或下划线或汉字,也能写成a-zA-Z0-9_汉字,注意和.区分,.的范围更广
五 \W (大写) :等同于\^\\w,不包含a-zA-Z0-9_汉字等字符
六 \s (小写) :代表换行符、Tab制表符等空白字符(空格、回车、制表符)。
七 \S (大写) :代表非空白字符,范围很广,包含\w,\d,#,%之类但并限于的更多的字符
一般大写的因为范围不好控制,不常使用,记住小写的范围就可以使用了。
八 \\d\\D\\w\\W\\s\\S可以表示所有字符集,. 点号表示的范围是不包含换行的所有字符集
九 :%\&,方括号的另一个用途是可以指定不在数字字母等范围内的字符,如冒号,百分号之类
核心四个,.dws,加个方括号
2.量词,字符出现的次数
? :匹配前面的子表达式0次或1次。
* :匹配0至多个在它之前的子表达式。
+ :匹配前面的子表达式1次或多次。
{n} :匹配确定的 n 次。
{n,m} :最少匹配 n 次且最多匹配 m 次。
组合,\d+,\w+,分别表未数字串,字符串,如果是星号,也包含空串
3.位置,字符出现的位置
^ (shift+6) :匹配一行的开始。
$ 匹配行结束符。
\b 单词边界
\B 非单词边界
最常用的
^.*111111.*$,包含11111的字符串
4逻辑运算符
| ()(?=)(?:) (?!)这些组合比较复杂,一般掌握|或,()就可以了
应用:
比如,要提取日志14:55,56分,关健函数set/get,值1000的日志,.是任意字符,加*是任意个任意字符,表示三个索引信息之间有其他任意个字符,三个索引必须顺序固定,方括号可以枚举,这意味着包含14:55和14:56,当然也可以写成(14:55|14:56),i不区分大小写,n显示行号
grep -inE "14:556:.*(set|get).*1000" log.txt
也可以简单些,这里使用r参数,会递归查找
grep -rin 14:556 | grep -E "set|get" | grep 1000
如果三个位置顺序不固定
grep -rinP '^(?=.*14:55:)(?=.*(set|get))(?=.*1000).*$'