正则表达式是基于样式匹配的进行文本处理,透过一些特殊符号的辅助,可以达到搜寻、删除、取代某特定的字符串。 grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。 我们利用这些返回值就可进行一些自动化的文本处理工作。 正则表达式分为基本正则表达式和扩展正则表达式; grep: 默认支持基本正则表达式。 egrep: 扩展正则表达式,是grep的扩展。 元字符:不表示字符本身的意义,而用于额外功能性的描述,只有一部分文本处理工具支持它; 基本正则表达式: \:转义符,可以将下面的特殊字符转义成普通字符。a\.b 匹配a.b、ca.b,不能匹配acb; a\*b匹配a*b、a*bb^:行起始标记。^te匹配所有以te开头的行从文件file包含有这个a*b.ab的那一行
grep "a\*b\.ab" file$:行尾标记,锚定行的结束 如:end$匹配所有以end结尾的行从文件file匹配以the开头的那一行
grep "^the" file[]:匹配包含在 [字符] 之中的任意一个字符。te[abc]匹配tea、teb匹配空白行 grep "^$" file
[^]:匹配不包含在 [字符] 之中的任意一个字符。te[^abc]匹配ted、te1,不匹配tea、teb匹配以te开头后跟的字符是a、b、c的行 grep "^te[abc]" file[-]:匹配[ ]中指定范围的内的任意一个字符。 [a-z]:所有小写字母 [0-9]:所以数字 [a-zA-Z]:所以的大小写字母匹配不是以s 、S开头的行 grep "^[^sS]" file\?:匹配之前项的1次或0次。a\?b匹配b、ab、aab、acb匹配以小写字母开头的行 grep "^[a-z]" file*:匹配之前项任意次。a*b匹配b、ab、aab、acb、aaaaaabgrep "a\?b" file\( \):创建一个用于匹配的子串。 \(ab\): ab, aab, abb, abab a任意一个字符b任意字符a任意一个字符b(前后两个任意一个字符要相等,后面的“a任意一个字符b”是完全参照第一“a任意一个字符b”): \(a.b\).*\1grep "a*b" file\{n \}:匹配之前项n次。[0-9]\{2\}匹配任意两位数grep "\(a.b\).*\1" file\{n ,\}:匹配之前项至少需要n次。[0-9]\{2,\}匹配任意两位数或任意更多数字grep "[0-9]\{2\}" file\{n ,m\}:匹配之前项必须匹配最小n次和最大m次。[0-9]\{2,3\}匹配任意两位数或任意三位数grep "[0-9]\{2,\}" file\<:锚定单词的开始,如:‘\<te‘匹配包含以te开头的单词的行。grep "[0-9]\{2,3\}" file\>:锚定单词的结束,如‘te\>‘匹配包含以te结尾的单词的行。grep "\<te" file[:alnum:] 所有数字和字母。相当于[a-zA-Z0-9]grep "te\>" file[:alpha:] 所有字母字符,相当于[a-zA-Z]grep "a[[:alnum:]]b" file[blank:] 所有空格与制表符 [:digit:] 所有数字,相当于[0-9] [:lower:] 小写字母相当于[a-zA-Z] [:upper:] 大写字母相当于[a-zA-Z] [:punct:] 标点符号 [:space:] 空白字符grep "a[[:alpha:]]b" file在/etc/passwd中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行; grep "^[[:space:]]*#[[:space:]]\{1,\}[^[:space:]]" /etc/passwd扩展正则表达式(除了上面的特殊字符还支持下面几个字符): +: 匹配其前面的字符至少1次; a|b: 二选一;
grep用法: grep [options] ‘pattern‘ file1 file2 ….grep选项有:-v: 反向选取,只显示不符合模式的行;
-o: 只显示被模式匹配到的字串,而不是整个行;
-i: 不区分字符大小写;
-A #:显示匹配到的行时,顺带显示其后面的#个行;
-B #:前面的#行;
-C #:前后的#行;
-E: 使用扩展的正则表达式
grep -E = egrep匹配 1.0.0.1 ~ 223.255.255.254
如果需要在多级目录中对文本进行递归搜索,可以使用
原文地址:http://xiang99.blog.51cto.com/3583449/1416414