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