前言
grep是一种强大的文本搜索工具, 它能使用正则表达式搜索文本, 并把匹配的行打印出来。通常grep有三种版本grep、egrep(egrep等同于grep -E)和fgrep。egrep为扩展的grep, fgrep则为快速grep(固定的字符串来对文本进行搜索, 不支持正则表达式的引用但是查询极为快速)。grep是Linux文本处理三剑客之一。
grep的使用
使用方式:grep [OPTIONS] PATTERN [FILE...]
orgrep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
常用选项:
- –color=auto: 对匹配到的文本着色后进行高亮显示;
- -i: 忽略字符的大小写
- -o: 仅显示匹配到的字符串
- -v: 显示不能被模式匹配到的行
- -E: 支持使用扩展的正则表达式
- -q: 静默模式, 即不输出任何信息
- -A #: 显示被模式匹配的行及其后#行
- -B #: 显示被模式匹配的行及其前#行
- -C #: 显示被模式匹配的行及其前后各#行
注: 使用grep匹配时需使用双引号引起来(单引号为强引用), 防止被系统误认为参数或者特殊命令而报错。
扩展grep使用方式
使用方式:egrep [OPTIONS] PATTERN [FILE...]
orgrep -E [OPTIONS] PATTERN [FILE...]
常用选项:
- -i: 忽略字符的大小写
- -o: 仅显示匹配到的字符串本身
- -v: 显示不被模式匹配到的行
- -q: 静默模式, 即不输出任何信息
- -A #: 显示被模式匹配的行及其后#行
- -B #: 显示被模式匹配的行及其前#行
- -C #: 显示被模式匹配的行及其前后各#行
- -G: 支持基本正则表达式
grep正则表达式元字符
- '^': 锚定行首
- '$': 锚定行尾
- '.': 匹配任一一个字符
- '': 匹配零个或多个先前字符*
- '?': 匹配其前面的字符0次或者1次;
- '+': 匹配其前面的字符1次或者多次;
- '{m}': 匹配其前面的字符m次(\为转义字符)
- '{m,n}': 匹配其前面的字符至少m次, 至多n次
- '[]': 匹配一个指定范围内的字符 或者 '[^]'匹配指定范围外的任意单个字符
- '<'或'\b': 锚定词首
- '>'或'\b': 锚定词尾(可用<PATTERN>: 匹配完整单词)
- '()': 将多个字符当做一个整体进行处理
关于后向引用
后向引用: 引用前面的分组括号中的模式所匹配到的字符
分组括号中的模式匹配到的内容或被正则表达式引擎自动记录于内部的变量中:
- \1: 模式从左侧起, 第一个左括号及与之匹配的右括号之间模式匹配到的内容
- \2: 模式从左侧起, 第二个左括号及与之匹配的右括号之间模式匹配到的内容
扩展正则表达式与正则表达式略有不同
关于'[]'的不同
'[]'
: 依旧匹配指定范围内的任意单个字符;
但是有很多特殊匹配方式:
- [:digit:] 匹配任意单个数字
- [:lower:] 匹配任意单个小写字母
- [:upper:] 匹配任意单个大写字母
- [:alpha:] 匹配任意单个字母
- [:alnum:] 匹配任意单个字母或数字
- [:punct:] 匹配任意单个符号
- [:space:] 匹配单个空格
扩展正则不需要转义字符的地方
一些地方取消了转义字符的使用:
- '?': 匹配其前面的字符0次或者1次;
- '+d': 匹配其前面的字符1次或者多次;
- '{m}': 匹配其前面的字符m次(\为转义字符)
- '{m,n}': 匹配其前面的字符至少m次, 至多n次
- (): 将一个或多个字符捆绑在一起, 当做一个整体进行处理, 反向引用照常使用。
- '|': 或 (注: 'C|cat'为C与cat, '(C|c)at才是Cat与cat')