正则表达式分基本正则表达式(bgrep)和扩展正则表达式(egrep)。

正则表达式是由元字符组合的式子,可以当做模式使用以匹配符合指定特征的字符串。而grep 能根据指定的模式,在一个或多个文件中将符合模式的字符串所在的行搜索出来。

grep -E 也就是与扩展正则表达式一样。

fgrep 是快速搜索,不支持正则表达式。

grep  [options] pattern(模式一定要有)。

下面,先介绍一些grep使用到的元字符:

^pattern:行首锚定符,必须出现在行首。

pattern$:行尾锚定符,必须出现在行尾。

\<pattern:词首锚定符,必须出现在词首或串首。

pattern\>:词尾锚定符,必须出现在词尾或串尾。

.:匹配任意单个字符。

*:匹配此前的字符0到任意次。

.*:匹配任意长度的任意字符。

?:匹配此前的字符0次或1次。

pattern \{m,n\}:匹配此前的字符至少m次,至多n次。

[]:匹配指定范围内的任意单个字符。

[^]:不包含指定范围在内的任意单个字符。

\( \):字符分组和引用。

接着,介绍一下grep的选项:

-v :不显示匹配模式的内容,只显示不匹配的内容。

-r :在目录中递归搜索文件。

-i :不区分大小写。

-A :匹配到行的下面多少行,后跟数字。

-B :匹配到行的上面多少行,后跟数字。

-C :匹配到行的上下多少行,后跟数字。

-o :只显示被模式匹配到的串本身,而非串所在的行。

最后,介绍几个例子:

(1):查找当前系统上名为user1的用户账户相关信息。

     grep  "^user1" 或 "user\<"

(2):查找当前系统上其用户账号密码最长使用期限为99999天的账号相关信息。

  grep "[^:]*:[^:]*:[^:]*:[^:]*:99999:.*"

或者 grep "\(.*:\)\{4,\}99999".

(3):在/proc/meminfo 下查找以s开头不区分大小写的行。

grep -i ^s /proc/meminfo  或  grep ^[sS] /proc/meminfo 。