扩展的正则表达式
一、扩展的正则表达式
扩展正则表达式比基础正则表达式多了几个重要的符号。
注意,在使用这些扩展符号时,需要使用egrep命令
- “?”符号
- 用于匹配前一个字符0次或1次,所以"ro?t" 仅可以匹配rot、rt。
- “+”符号
- 用于匹配前一个字符1次以上,所以“ro+t”可以匹配rot、root等。
- “|”符号
- “|”符号是“或”的意思,即多种可能的罗列,彼此间是一种分支关系。
- 例:
- “()” 符号
- “()” 符号通常需要和“|”符号联合使用,用于枚举一系列可替换的字符
# 使用“()”和“|”匹配hard、hold或hood
h(ar|ol|oo)d
二、通配符
- 通配符和正则表达式之间存在一些差异,通配符主要用在文件名的匹配上,正则表达式主 要使用在对文件内容的匹配上。
1、“*” 符号
- 代表0个或多个字符
# 列出当前目录下以“.doc”结尾的文件
[root@sunday-test ~]# ls -l *.doc
2、“?” 符号
- 代表任意一个字符
3、“{}” 符号
- 匹配所有括号内包含的以逗号隔开的字符
4、 “^” 符号和 “!” 符号
- 这两个符号往往和“[]”一起使用,当出现在“[]”中的时候,代表取反。所以[ ^A] 或 [!A] 都代表不是A
特殊的POSIX字符
grep支持一类特殊的POSIX字符,列举如下:
字符 | 含义 |
[:alnum:] | 文字数字字符 |
[:alpha:] | 文字字符 |
[:digit:] | 数字字符 |
[:graph:] | 非空字符(非空格、控制字符) |
[:lower:] | 小写字符 |
[:upper:] | 大写字符 |
[:cntrl:] | 控制字符 |
[:print:] | 非空字符(包括空格) |
[:punct:] | 标点符号 |
[:space:] | 所有空白字符(新行,空格,制表符) |
[:xdigit:] | 十六进制数字(0-9,a-f,A-F) |
常用grep命令选项
- -A NUM,--after-context=NUM 除了列出符合行之外,并且列出后NUM行。
- -B NUM,–before-context=NUM 与 -A NUM 相对,但这此参数是显示除符合行之 外并显示在它之前的NUM行。如: (从file中搜寻有panda样式的行,并显示该行的前1行)
- -C [NUM], -NUM, --context[=NUM] 列出符合行之外并列出上下各NUM行,默认值 是2。
- -c, --count 不显示符合样式行,只显示符合的总行数。若再加上-v, --invert-match, 参数显示不符合的总行数
- -i, –ignore-case 忽略大小写差别
- -n, –line-number 在匹配的行前面打印行号
- -v, –revert-match 反检索,只显示不匹配的行
- -s 不显示不存在或无匹配文本的错误信息
- -w: 整词比对, 类似 \
- -o: 只输出符合匹配的字符串。 (gnu 新版独有, 不见得所有版本都支持.)
- -E: 切换为 egrep