目录
通配符
通配符一般用于文件名匹配,由shell解析,常用到的命令为:find、ls、cp、mv。
常见通配符如下:
通配符 | 含义 | 实例 |
---|---|---|
* | 匹配 0 或多个字符 | a*b:a与b之间可以有任意长度的任意字符, 也可以一个也没有, 如aabcb, axyzb, a012b, ab。 |
? | 匹配任意一个字符 | a?b:a与b之间必须也只能有一个字符, 可以是任意字符, 如aab, abb, acb, a0b。 |
[list] | 匹配 list 中的任意单一字符 | a[xyz]b:a与b之间必须也只能有一个字符, 但只能是 x 或 y 或 z, 如: axb, ayb, azb。 |
[!list] 或 [^list] | 匹配 除list 中的任意单一字符 | a[!0-9]b:a与b之间必须也只能有一个字符, 但不能是阿拉伯数字, 如axb, aab, a-b。 |
[c1-c2] | 匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z] | a[0-9]b:0与9之间必须也只能有一个字符且只能为数字 如a0b, a1b... a9b。 |
[!c1-c2]或[^c1-c2] | 匹配不在c1-c2的任意单一字符 | a[!0-9]b 如acb adb |
{string1,string2,...} | 匹配 sring1 或 string2 (或更多)其一字符串 | a{abc,xyz,123}b:列出aabcb,axyzb,a123b |
正则表达式
Regular expression(正则表达式)是由一类特殊字符及文本字符编写的模式,其中有些字符(元字符)不代表字符的字面意义,而表示控制或通配功能。
分类:
基本正则:使用基本正则时:(, ), {, }, +, ?需要转义
扩展正则(grep -E 或 egrep):
单个字符类
元字符 | 解释 | 示例 |
---|---|---|
. | 匹配任意一个字符 | a.b:代表aab, abb, acb |
[] | 匹配括号中的任意一个字符 | a[012]b:代表a0b, a1b, a2b |
- | 在[]中内表示字符范围 | a[0-9]b:代表a0b, ...., a9b |
^ | 位于[]括号的开头,匹配除括号中的字符之外的任意一个字符 | a[^0-9]b:代表aab,中间字符不能为数字 |
[[:alpha:]] [[:digit:]] | grep工具预定义的命名字符类,可以用[]替换 | ls
|
数量限定符
元字符 | 解释 | 示例 |
---|---|---|
? | 紧跟在它前面的单元应匹配0次或1次 | ab?:可以匹配到a, ab |
+ | 紧跟在它前面的单元应匹配1次或多次 | ab+:可以匹配到ab, abb, abbb等 |
* | 紧跟在它前面的单元应匹配0次或多次 | ab*:可以匹配到a, ab, abb等 |
{m} | 紧跟在它前面的单元应精确匹配m次 | ab{3}:可以匹配到abbb |
{m,} | 紧跟在它前面的单元应匹配至少m次 | ab{2,}:可以匹配到abb, abbb等 |
{,n} | 紧跟在它前面的单元应匹配最多n次 | ab{,3}:可以匹配到a, ab, abb, abbb |
{m,n} | 紧跟在它前面的单元应匹配至少m次,最多n次 | ab{1,3}:可以匹配到ab, abb, abbb |
位置限定符
元字符 | 解释 | 示例 |
---|---|---|
^ | 匹配行首的位置 | egrep '^hello' regex |
$ | 匹配行末的位置 | egrep 'hello$' regex |
\< | 匹配单词开头的位置 | egrep '\<he' regex |
\> | 匹配单词结尾的位置 | egrep 'ld\>' regex |
\b | 匹配单词开头或结尾的位置,可以代替\< 或 \> | egrep '\bhe\b' regex |
\B | 匹配非单词开头或结尾的位置 | egrep '\BorB' regex |
其它特殊字符
元字符 | 解释 | 示例 |
---|---|---|
\ | 转义字符,将特殊字符转义为普通字符,将普通字符转义为特殊字符 | |
() | 将正则表达式的一部分括起来组成一个单元,可以对整个单元使用数量限定符 | |
| | 连接两个子表达式,表示或的关系 | egrep 'w1|hello' regex |
练习
匹配IP地址
grep "^\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}$" regex egrep "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" regex egrep "^([0-9]{1,3}\.){3}[0-9]{1,3}$" 1.tx