本篇主要介绍基本正则表达式元字符,以及基本正则表达式在grep的简单应用。
基本正则表达式元字符可以分为四大类,分别是:字符匹配、匹配次数、位置锚定、分组与引用。
元字符 | 描述 |
---|---|
. | 匹配任意单个字符 |
[] | 匹配指定范围内的任意单个字符 |
[^] | 匹配指定范围外的任意单个字符 |
[:digit:]或[0-9] | 任意个数字 |
[:lower:] | 小写字母 |
[:upper:] | 大写字母 |
[:alpha:] | 大小写字母 |
[:alnum:] | 字母数字 |
[:space:] | 空白符 |
... | 其它知名字符类 |
元字符 | 描述 |
---|---|
* | 匹配其前面的字符任意次(0,1,多次) |
\? | 匹配其前面的字符0次或1次,即其前面的字符是可有可无的 |
\+ | 匹配其前面的字符1次或多次,即其前面的字符要出现至少一次 |
\{m\} | 匹配其前面的字符m次(精确次数匹配) |
\{m,n\} | 匹配其前面的字符至少m次,至多n次(范围次数匹配) |
\{,n\} | 至多n次 |
\{m,\} | 至少m次 |
.* 可以实现匹配任意长度的任意字符
元字符 | 描述 |
---|---|
^ | 行首锚定,用于模式的最左侧 |
$ | 行尾锚定,用于模式的最右侧 |
\<或\b | 词首锚定,用于单词模式的左侧 |
\>或\b | 词尾锚定,用于单词模式的右侧 |
\<PATTERN\> | 匹配完整单词 |
^[[:space:]]*$ 可以实现匹配空行或包含空白字符的行
元字符 | 描述 |
---|---|
\(\) | 将一个或多个字符捆绑在一起,当作一个整体进行处理(由于括号在命令行有特殊意义,故这里要转义以使用原义) |
\1 | 表示从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符 |
\2 | 表示从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符 |
\... | 类似\1和\2,以此类推 |
\| | 或者 |
\(\) 表示一个分组
\1,\2,\... 表示一个引用
分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量就是\1,\2,\...
准确的说,“贪婪模式”是正则表达式的特性,跟grep命令本身无关。
贪婪模式是指,只要能够匹配,尽量匹配更多的内容。下面举两个例子。
查找/etc/centos-release中单个数字。
\<[0-9]\>
匹配单个任意数字,显然7和6都满足,由于是贪婪模式,所以把7和6都匹配出来了。
查找/etc/passwd中的两位或三位数。(由于文件内容较多,只截取部分)
\<[0-9]\{2,3\}\>
匹配2-3位数字,110和120都满足,也是贪婪模式,所以都匹配出来了。
找出/etc/passwd用户名和登录shell同名的行。(分组的应用)
grep ‘^\([^:]\+\)\>.*\<\1$‘ /etc/passwd
显示三个用户root、tom、apache的UID和默认登录shell。(“或”的应用)
grep ‘^\(root\|tom\|apache\)\>‘ /etc/passwd | cut -d: -f3,7
原文:https://blog.51cto.com/6465966/2400219