shell中的正则表达式有基本的正则表达式和扩展的正则表达式,这个需要理解清楚,因为不同的命令支持的正则表达式是不同的。常用的只有egrep和 awk支持扩展正则表达式,而 gerp、vi、sed支持基本的正则表达式。
基本的正则表达式
| 表达式 |
含义 |
| c |
普通的字母,匹配自己 |
| . |
匹配任意单个字符 |
| * |
匹配一个字符0次或者多次 |
| .* |
任意多个字符 |
| [abc] |
匹配中括号中的任意一个字符 |
| [0-9a-zA-Z] |
匹配连续的字符,示例中匹配素所有的数字和字母 |
| ^ |
字符串开始 |
| $ |
字符串结束 |
| [^abc] |
不匹配abc中的任何一个 |
| \ |
匹配转义后的字符 |
| \{n,m\} |
匹配前一个字符出现n到m次 |
| \{n,\} |
至少重复n次 |
| \{n\} |
重复n次 |
| \(\) |
存储在保留空间中,最多9个 |
| \n |
通过\1 ~ \9 获得保留空间的内容 |
扩展的正则表达式
| 表达式 |
含义 |
| {n,m} |
和 {n,m}相同 |
| + |
匹配前一个一次或者多次 |
| ? |
匹配前一个一次或者零次 |
| | |
逻辑或,匹配前者后者后者 |
| () |
匹配正则集合 |
POSIX 规范
| 字符集 |
含义 |
| [:alpha:] |
字母字符 |
| [:alnum:] |
字母数字 |
| [:cntrl:] |
控制字符 |
| [:digit:] |
数字字符 |
| [:xdigit:] |
十六进制数字字符 |
| [:punct:] |
标点符号 |
| [:graph:] |
非空格字符 |
| [:print:] |
可以显示的字符 |
| [:space:] |
任何产生空白的字符 |
| [:blank:] |
空格和Tab |
| [:lower:] |
小写字母 |
| [:upper:] |
大写字母 |
grep --color [[:digit:]] /etc/passwd
GUN规范
有两个 \b 单词的边界, \B不是单词的边界
grep --color "the\b" /etc/passwd
grep --color "ack\B" /etc/passwd