linux之正则表达式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux之正则表达式相关的知识,希望对你有一定的参考价值。
1、文本处理工具(grep、sed、awk)
grep:文本过滤工具(模式:pattern);
sed:stream editor,流编辑器;文本编辑器;
awk:linux上的实现为gwak,文本报告生成器(格式化文本);
以上三个工具都会用到正则表达式。
2、正则表达式:(regual expression,REGEXP):由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义,而是用于表示控制或统配的功能。
正则表达式分类:基本正则表达式BRE、扩展正则表达式ERE。(二者的区别:元字符不同)
正则表达式元字符:
grep:全面搜索文件每一行并用模式(过滤条件)匹配,输出匹配行。
模式:由正则表达式的元字符及文本字符所编写出的过滤条件。
正则表达式引擎:
grep用法:
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
OPTIONS:
--color=auto:对匹配到的文本着色高亮显示;
-i:ignorecase;忽略字符大小写;
-o:只显示匹配到的字符串本身,默认显示是匹配到的行;
-v:--invert-match;显示不能被模式匹配到的行;
-E:支持使用扩展的正则表达式;
-q:--quit,--silent;不输出任何东西
-A #:显示匹配到的后#行 after
-B #:显示匹配到的前#行 before
-C #:显示匹配到的前后#行;context
基本正则表达式元字符:(分类:字符匹配:匹配次数、位置锚定、分组及引用)
字符匹配:
.:匹配任意单个字符(点号)
[ ]:匹配指定范围内的任意单个字符;
[^ ]:匹配指定范围外的任意单个字符;
[ [:digit:]];[[:lower:]];[[:upper:]];[[:alpha:]];[[:alnum:]];[[:punct:]];[[:space:]]
[[email protected] ~]# grep r[[:alpha:]][[:alpha:]]t /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[[email protected] ~]#
匹配次数:用于在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数。
*:匹配其前面的字符任意次:0,1,多次;
.*:匹配任意长度的任意字符;
\?:匹配其前面的字符0次或1次;即前面的字符是可有可无的;
\+:匹配前面的字符1次或多次;即前面的字符要至少出现1次;
\{m\}:匹配其前面的字符m次;
\{m,n\}:匹配其前面的字符至少m次,至多n次;
\{0,n\}:至多n次;
\{m,\}:至少m次;
[[email protected] ~]# grep ro*t /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pkiuser:x:17:17:Certificate System:/usr/share/pki:/sbin/nologin
[[email protected] ~]#
位置锚定:
^:行首锚定:用于模式的最左侧;
$:行尾锚定:用于模式的最右侧;
^PATTERN$:用于PATTERN来匹配整行;
^$:空白行;
^[[:space:]]*$:空白行或包含空白字符的行;
单词:非特殊字符组成的连续字符(字符串)都称为单词;
\<或\b:词首锚定;用于单词模式的左侧;
\>或\b:词尾锚定,用于单词模式的右侧;
\<PATTERN\>:匹配完整单词;
[[email protected] ~]# grep "\<root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[[email protected] ~]# grep "\broot" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[[email protected] ~]# grep "root\>" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[[email protected] ~]#
[[email protected] ~]# grep "^root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
[[email protected] ~]# grep "root$" /etc/passwd
[[email protected] ~]#
分组及引用:
如:
[[email protected] ~]# grep UUID /etc/fstab
UUID=47c2d0d2-2c32-4a36-89e7-420739594a95 /boot xfs defaults 0 0
[[email protected] ~]#
以上是关于linux之正则表达式的主要内容,如果未能解决你的问题,请参考以下文章