grep命令很强大,在命令行中使用man grep 可以查看grep的命令各个选项介绍:
>grep [选项] 模式 文件名
选项:
-i #忽略大小写
--color #把匹配到的以颜色显示
-v #反向,即匹配到的不显示
-o #只显示被匹配的字符串
-A n #显示匹配到的字符时也显示其后面的n行
-B n #显示匹配到的字符时也显示其前面的n行
-C n #显示匹配到的字符时也显示其前后的n行
-E #拓展正则
>grep -A 2 'root' /etc/passwd
>grep -E 'C|cat' /etc/passwd
【正则】
元字符
. #匹配任意单个字符
[] #批配指定范围内的任意单个字符
[^] #批配指定范围外的任意单个字符
字符集合:
[:digit:] #批配数字集合
[:lower:] #批配小写字母集合
[:upper:] #批配大写字母集合
[:punct:] #批配标点符号集合
[:space:] #批配空白字符集合
[:alpha:] #批配所有字母
[:alnum:] #批配包含所有数字字母
>grep '[[:digit:]]$' /etc/inittab #匹配以数字结尾的行
匹配次数
* #匹配其前面的字符任意次
.* #匹配任意长度的任意字符
+ #只有拓展正则才有,匹配前面字符至少出现一次
| #只有拓展正则才有,或
\? #匹配其前面的字符0次或1次,在命令行中使用时,用反斜杆转义\?
>grep 'a\?b' test.txt
\{m,n\} #匹配前的字符至少m次,最多n次
锚定位置:
^ #锚定开头
$ #锚定结尾
^$ #匹配空白行
\<或者\b #其后面的任意字符必须作为单词的首部出现
\>或者\b #其后面的任意字符必须作为单词的尾部出现
grep '\<root\> #匹配完整的单词root ,而不是rooter ,chroot
\(\) #分组,反斜杠是给bash转义
\(ab\) #ab作为整体来查找
grep '\(ab\).*\1' test.txt #\1是后向引用\(ab\)
注:grep 使用-E选项是拓展正则,不用反斜杆转义