grep(Global Regular Expression Print)命令是一种强大的文本搜索/匹配工具,它亦可使用正则表达式来作为搜索/匹配条件,并把匹配的行打印出来。

Error:注意:如果匹配条件中带有空格,请一定要用引号包裹起来,否则,空格后的内容会被当成文件名使用。

命令语法

grep [选项]... 模式 [文件]...
返回值 说明
0 搜索/匹配成功
1 搜索/匹配失败
2 文件不存在
info:grep命令既可以使用字符串作为查询规则/模式,也可以使用 正则表达式 和 POSIX字符 作为查询规则/模式。

附加参数

参数 说明
-a, --text 不要忽略二进制的数据
-A<显示行数>, --after-context=<显示行数> 除了显示符合范本样式的那一列之外,并显示该行之后的内容
-b, --byte-offset 在显示符合样式的那一行之前,标示出该行第一个字符的编号
-B<显示行数>, --before-context=<显示行数> 除了显示符合样式的那一行之外,并显示该行之前的内容。
-c, --count 计算符合样式的列数
-C<显示行数>, --context=<显示行数>或-<显示行数> 除了显示符合样式的那一行之外,并显示该行之前后的内容
-d <动作>, --directories=<动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作
-e<范本样式>, --regexp=<范本样式> 指定字符串做为查找文件内容的样式
-E, --extended-regexp 将样式为延伸的普通表示法来使用
-f<规则文件>, --file=<规则文件> 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式
-F, --fixed-regexp 将样式视为固定字符串的列表
-G, --basic-regexp 将样式视为普通的表示法来使用
-h, --no-filename 在显示符合样式的那一行之前,不标示该行所属的文件名称
-H, --with-filename 在显示符合样式的那一行之前,表示该行所属的文件名称
-i, --ignore-case 忽略字符大小写的差别
-l, --file-with-matches 列出文件内容符合指定的样式的文件名称
-L, --files-without-match 列出文件内容不符合指定的样式的文件名称
-n, --line-number 在显示符合样式的那一行之前,标示出该行的列数编号
-q, --quiet或--silent 不显示任何信息
-r, --recursive 此参数的效果和指定-d recurse参数相同
-s, --no-messages 不显示错误信息
-v, --revert-match 显示不包含匹配文本的所有行
-V, --version 显示版本信息并退出
-w, --word-regexp 只显示全字符合的列
-x, --line-regexp 只显示全列符合的列
-y 此参数的效果和指定-i参数相同

常用范例

查找指定进程

ps -ef|grep git

Git进程


查找指定进程个数

ps -ef|grep git -c
ps -ef|grep -c git

当前Git只有一个进程


从文件中读取关键词进匹配

cat key | grep -f test

从文件中读取关键词进匹配


从文件中读取关键词进行匹配,且显示行号

cat key | grep -nf test

从文件中匹配关键词

grep 'ding' test

从文件中查找关键词


从多个文件中匹配关键词

grep 'ding' test test2

grep不显示本身进程

ps aux|grep \[s]sh
ps aux | grep ssh | grep -v "grep"

查询ssh进程,并不显示自身进程


输出1开头的行

cat test |grep ^1

以1开头的行


输出非1开头的行

cat test |grep ^[^1]

输出非1开头的行


输出以g结尾的行内容

cat test |grep g$

输出以g结尾的行内容


输出包含1或者2的内容行

cat test |grep -E "1|2"

输出包含1或者2的内容行


正则匹配查询

grep '[a-z]\{3\}' test

匹配test文件中包含3个连续小写字母的行