Regual Expression
由一类特殊字符及文本字符所编写的模式,其中有些字符不表示字面意义,而是用于控制或通配的功能 分类
REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能
程序支持:grep, vim, less,nginx等
分两类:
基本正则表达式:BRE 扩展正则表达式:ERE grep -E, egrep
正则表达式引擎:
采用不同算法,检查处理正则表达式的软件模块 PCRE(Perl Compatible Regular Expressions)
元字符分类:
字符匹配、匹配次数、位置锚定、分组
man 7 regex
基本正则表达式 扩展正则表达式
grep:文本过滤(模式:pattern)工具;
grep, egrep, fgrep(不支持正则表达式搜索)
sed:stream editor,文本编辑工具;
awk:Linux上的实现gawk,文本报告生成器;
二者区别元字符不同
grep:global search regular expression and print out the line
作用:文本搜索工具,根据用户指定的模式(过滤条件)对目标文本逐行匹配检查,打印匹配到的行 模式:有正则表达式的元字符及文本字符所编写出的过滤条件 grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...] grep root /etc/passwd grep "$USER" /etc/passwd #支持变量引用 grep '$USER' /etc/passwd grep `whoami` /etc/passwd #支持命令引用
grep
常见选项: --color=auto: 对匹配到的文本着色显示; -v: 显示不能够被pattern匹配到的行; -i: 忽略字符大小写 -n:显示匹配的行号 -c: 统计匹配的行数 -o: 仅显示匹配到的字符串; -q: 静默模式,不输出任何信息 -A #:after, 后#行 -B #: before, 前#行 -C #:context, 前后各#行 -e:实现多个选项间的逻辑or关系 grep –e ‘cat ’ -e ‘dog’ file -w:整行匹配整个单词 -E:使用ERE
egrep= grep -E
grep 要用PATTERN就要用引号把PATTERN引上。
正则表达式的元字符
字符匹配----单个字符 .:点号匹配任意单个字符 []:匹配指定范围内的任意单个字符 [^]:匹配指定范围外的任意单个字符 字符集合--代表集合中的所有字符 Within a bracket expression, the name of a character class enclosed in "[:" and ":]" stands for the list of all characters belonging to that class. Stan‐dard character class names are: alnum digit punct alpha graph space blank lower upper cntrl print xdigit 字符集合在模式中必须为 [[:xxxx:]] 格式代表字符集中的一个 字符集合与其他字符使用时[a[:xxxx:]b] [^[:xxxx:]] [:digit:],[:lower:],[:upper:],[:alpha:],[:punct:],[:space:],[:alnum:] 匹配次数-----------(正则表达式工作在贪婪模式下有多长匹配多长)用在要指定其出现的次数的字符的右侧,用户限制其前面字符出现的次数。 *: 匹配其前面字符任意次--0,1或多次(可有可无或重复多次) .* 匹配任意长度的任意字符 \? 匹配其前的字符0次或1次,即前面的字符可有可无 \+ 匹配其前面的字符1次或多次,即前面的字符出现至少一次 \{m\}匹配其前面的字符m次,精确次数匹配 \{m,n\}匹配前面的字符至少m次,至少n次 \{0,n\}匹配前面的字符至多n次 \{m,\}匹配前面的字符至少m次,多了不限 位置锚定---锚定整个patter ^:行首锚定;用于模式的最左侧 $:行尾锚定;用模式的最右侧 ^PATTERN$:用于匹配整行 ^$:空白行锚定,没有任意字符(包括空白字符) ^[[:space:]]*$:空白行或包含空白字符的行 单词:非特殊字符组成的------连续字符(的字符串包括数字)都称为单词 \<或\b:词首锚定,用于单词模式的左侧 \>或\b:词尾锚定,用于单词模式的右侧 \<PATTERN\>匹配完整单词 \bPATTERN\b 分组及引用 \(PATTER\)或\(指定的字符串\) \(\):将一个或多个字符捆绑在一起,当作一个整体进行处理 \(xy\)*ab xy出现0次1次或多次 注:分组括号中的模式匹配到的内容,会被正则表达式引擎自动记录于内部的变量中,这些变量为 \1 \2 \3 ...... 后向引用: grep “\(l..e\)*\1” 引用前面的分组括号中的模式所匹配到的字符
扩展正则表达式的元字符
字符匹配 .:任意单个字符 []:指定范围内的任意单个字符 [^]:指定范围外的任意单个字符 次数匹配 *:任意次0,1或多次 ?:0次或1次 {m}匹配其前字符m次 {m,n}:匹配其前字符最少m次,最多n次 {0,m}:匹配其前字符最多m次 {m,}:匹配最少m次 位置锚定 ^:行首锚定 $:行尾锚定 \<:词首锚定 \>:词尾锚定 或 a|b 整个右侧或左侧 C|cat C或cat (C|c)at Cat或cat 分组及引用: ():分组 后向引用: \1 \2 \3
grep
支持基本正则表达式 -E支持扩展正则表达式 -F不使用正则表达式
egrep
支持扩展正则表达式 -G支持基本正则表达式 -F不使用正则表达式
fgrep
当无需要用到元字符去编写模式时,使用fgrep性能更好
不支持正则表达式 -E支持扩展正则表达式 -G支持基本正则表达式
原创文章,作者:yyw,如若转载,请注明出处:http://www.178linux.com/30407