正则表达式:Regual Expression REGEXP
由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字母意义,而是用于表示控制或通配的功能;
分两类:
基本正则表达式:BRE
扩展正则表达式:ERE
元字符:\(hello[[:space:]]\+\)+
grep:Global search Regular expression and print out the line.
作用:文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查;打印匹配到的行;
模式:由正则表达式的元字符及文本字符所编写出的过滤条件;
正则表达式引擎:
grep [OPTIONS] PATTERN [FILE…]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]
OPTIONS:
—color=auto:对匹配到的文本着色后高亮显示;
-i: ignorecase. 忽略字符的大小写;
-o:仅显示匹配到的字符串本身;
-v, -invert-match: 显示不能被模式匹配到的行;
-E:支持使用扩展的正则表达式元字符
-q –quiet, –silent: 静默模式,即不输出任何信息;
-A #: after,后#行
-B#: before,前#行
-C#: context, 前后各#行
基本正则表达式元字符:
字符匹配:
. : 匹配任意单个字符
[] : 匹配指定范围内的任意单个字符;
[^]: 匹配指定范围外的任意单个字符
[:digit:]所有 数字 [:lower]所有的小写字母
[:upper:]所有的大写字母,[:alpha:]所有的字母。[:alnum:]包含数字的字母
[:punct:]所有标点符号的 [:space:]所有空白符号的
匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数;默认工作与贪婪模式;
* :匹配其前面的字符任意次; 0, 1, 多次;
例如: grep"x*y"
abxy
aby
xxxxy yab 都匹配
。*:匹配任意长度的任意字符
\?: 匹配其前面的字符0次或者1次;即前面的字符是可有可无的;
\+: 匹配其前面的字符1次或多次; 即其前面的字符要出现至少1次;
\{m\}: 匹配其前面的字符m次:
\{m,n\}: 匹配前面字符至少m次,至多n次;
\{o,n}: 至多n次
\{m,\}: 至少m次
位置锚定:
^ :行首锚定;用于模式最左侧、
$:行尾锚定;用于模式的最右侧;
^PATTERN$: 用于PATTERN来匹配整行;
^$:空白行;
^[[:space:]]*$空白行包含空白字符行
单词:非特殊字符组成的连续字符(字符串)都称为单词;
\<或\b:词首锚定,用于单词模式的左侧;
\>或\b: 词尾锚定,用于单词模式的右侧;
\<PATTERN\>: 匹配完整单词;
分组及引用:
练习:
1、显示/etc/passwd文件中不以/bin/bash结尾的行;
~]# grep -v/bin/bas$" /etc/passwd
,找出/etcpasswd文件中两位数或三位数
~]# grep "\<[0-9]\{2,3}\>" /etc/passwd
3、找出/etc/rc.d/rc.sysinit或/etc/grub2.cfg文件中,以至少一个空白字符开头,且后面非空白字符的行,
~]# grep "^[[:space:]]\+[^[:space:]]*$" /etc/grub2/cfg
4、找出“netstat -tan"命令的结果中以”LISTEN"后跟0、1或多个空白字符结尾的行;
~]# nestat -tan | grep "LISTEN[[:space:]]*$"
分组及引用
xy*ab
\(\): 将一个或多个字符捆绑在以前,当作一个整体进行处理;
\(xy\)*ab
Note: 分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内容的变量中,这些变量为:
\1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符;
\2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符;
\3:模式从左侧起,第三个左括号以及与之匹配的右括号之间的模式所匹配到的字符;
。。。。。
括号不能交叉,可以嵌套
He loves his lover.
He likes his liver.
She likes her liker.
She loves her liker.
~]# grep "\(l..e\).*\1" lovers.txt
后向引用: 引用前面的分组括号中的模式所匹配的字符;
原创文章,作者:shadow,如若转载,请注明出处:http://www.178linux.com/57147
评论列表(1条)
总结的不错~能扩充点会更好~继续加油~