grep 命令参数(对行数据的操作)
主要参数 | 含义 |
---|
- c | 只输出匹配行的计数 |
- i | 不区分大小写 |
- n | 显示匹配行及行号 |
- v | 取反 |
- r | 遍历所有子目录 |
- A | 后面跟数字,过滤出符合要求的行以及下面n行 |
- B | 同上,过滤出符合要求的行以及上面n行 |
- C | 同上,同时过滤出符合要求的行以及上下各n行 |
- q | 不显示任何信息,配合$?可以用作判断 |
元字符 | 作 用 |
---|
* | 前一个字符匹配 0 次或任意多次/与命令行中的*有所区别 |
. | 匹配除换行符外的任意一个字符 |
^ | 匹配行首。例如,^hello 会匹配以 hello 开头的行 |
$ | 匹配行尾。例如,hello& 会匹配以 hello 结尾的行 |
[] | 匹配方括号中任意一个字符,而且只匹配一个字符。例如.[abcedf]匹配任意一个字母, [0-9] 匹配任意一位数字,[a-z][0-9] 匹配由小写字母和一位数字构成的两位字符 |
[^] | 匹配除中括号中的字符以外的任意一个字符。例如,[^0-9] 匹配任意一位非数字字符,[^a-z] 匹配任意一位非小写字母,注意^在括号内表示取反,在括号外表示行首 |
\ | 转义符,用于取消特殊符号的含义 |
{n} | 表示其前面的字符恰好出现 n 次。例如,[0-9]{4} 匹配4位数字,[1][3-8][0-9]{9} 匹配手机号码 |
(n,} | 表示其前面的字符出现不少于 n 次。例如,[0-9]{2,} 匹配两位及以上的数字 |
{n,m} | 表示其前面的字符至少出现 n 次,最多出现 m 次。例如,[a-z]{6,8} 匹配 6〜8 位的小写字母 |
扩展正则表达式
扩展元字符 | 作 用 |
---|
+ | 前一个字符匹配 1次或任意多次。如“go+gle”会匹配“gogle” “google”或“gooogle”。当然,如果“o”有更多个,则也能匹配 |
? | 前一个字符匹配 0 次或 1 次。如 “colou?r” 可以匹配 “colour” 或 “color” |
| | 匹配两个或多个分支选择。如“was |
() | 匹配其整体为一个字符,即模式单元。可以理解为由多个单个字符组成的大字符。如“(dog)+”会匹配“dog” “dogdog” “dogdogdog”等,因为被()包含的字符会被当成一个整体。但 “hello(world |
grep 'o\{2\}' /etc/passwd 等同于 egrep 'o{2}' /etc/passwd #过滤两个o的行
egrep 'o+' /etc/passwd #过滤一个0以上的行
egrep 'oo?' /etc/passwd #过滤一个o以上的行
egrep 'root|nologin' /etc/passwd #过滤有root或者nologin的行
egrep '(oo){2}' /etc/passwd #过滤有两个oo的行,即过滤“oooo”的行