grep,egrep ,fgrep
grep [options] 'PATTERN' [FILES]
选项 -i ,忽略字母大小写
选项 --color,匹配出的字符串加色显示
选项 -v ,显示未匹配的行
选项 -o ,只显示匹配的字符串,而非行
选项 -E ,使用扩展正则表达式模式
选项 -A #,显示匹配到的字符所在行以及下#行
选项 -B #,显示匹配到的字符所在行以及上#行
选项 -C #,显示匹配到的字符所在行以及上下各#行
egrep = grep -E
fgrep
fast grep ,不支持正则表达式
grep:根据模式,搜索文本,并将符合模式的文本行显示出来。默认使用基本正则表达式定义的模式来过滤文本。
pattern:由文本字符和正则表达式的元字符组合而成匹配条件
正则表达式:regular expression,REGEXP
基本正则表达式 basic REGEXP,默认开启贪婪模式
元字符 meta char:
. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
字符集合 ,中括号外再加中括号表示任意
[:space:] 所有空白格
[:punct:] 所有标点符号
[:lower:] 所有小写字母
[:upper:] 所有大写字母
[:alpha:] 所有字母
[^[:alpha:] ]所有非字母
[:digit:] 所有数字
[:alnum:] 所有数字字母
[[:alpha:]]* [[:space:]]* [[:alpha:]] 字母开头字母结尾中间有空白字符
匹配次数(贪婪模式:尽可能长的匹配)
* 匹配其前面的字符任意次(0次或多次)
. * 匹配任意字符任意次
\?匹配其前面的字符1次或者0次
\{m,n\} 匹配其前面的字符至少m次,至多n次(\转译字符,逃逸字符,使得中括号内容不被展开,不被bash识别,而是被grep识别),n可以省略,表示无数次。m不可以省略,最小是0。
位置锚定
^ 锚定行首,此字符后面出现的任意内容必须出现在行首
$ 锚定行尾,此字符前面出现的任意内容必须出现在行尾
^$ 空白行
\< 或者\b 锚定词首,其后面的任意字符必须作为单词首部出现
\> 或者\b 锚定词尾,其前面的任意字符必须作为单词尾部出现
分组
\(ab\)将ab视作整体出现
后向引用
\1 第一个左括号以及与之对应的右括号所包括的所有内容
\2 第二个左括号以及与之对应的右括号所包括的所有内容
grep '\(l..e\).*\1' FILE
查找存在,前面有l..e,最后是有这个字符串的行
grep '\([0-9]\).*\1$' FILE
查找存在,前面有个数字,最后是以这个数字结尾的行
扩展正则表达式 extended REGEXP
元字符 meta char
字符匹配
. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
次数匹配
* 匹配其前字符任意次
?匹配其前字符0或1次
+ 匹配其前字符至少一次
{m,n} 匹配其前面的字符至少m次,至多n次
位置锚定
^ 锚定行首,此字符后面出现的任意内容必须出现在行首
$ 锚定行尾,此字符前面出现的任意内容必须出现在行尾
^$ 空白行
\< 或者\b 锚定词首,其后面的任意字符必须作为单词首部出现
\> 或者\b 锚定词尾,其前面的任意字符必须作为单词尾部出现
()分组
\1 后向引用
\2 后向信用
| 或者
\. 匹配. (\逃逸符,让元字符表示本身,而非代表意义)
egrep '\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>' FILE
显示文件中有1-255的所有行