正则表达式分基本正则表达式(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 。