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