本备忘单旨在快速提醒使用命令行程序 grep 所涉及的主要概念,并假设您已经了解其用法。
入门
使用
搜索标准输出(即文本流)
1
| $ grep [options] search_string
|
在文件中搜索确切的字符串:
1
| $ grep [options] search_string path/to/file
|
打印 myfile.txt 中包含字符串“mellon”的行
1
| $ grep 'mellon' myfile.txt
|
文件名中接受通配符。
选项示例
选项 |
示例 |
说明 |
-i |
grep -i ^DA demo.txt |
忘记区分大小写 |
-w |
grep -w “of” demo.txt |
仅搜索完整的单词 |
-A |
grep -A 3 ‘Exception’ error.log |
匹配字符串后显示 3 行 |
-B |
grep -B 4 ‘Exception’ error.log |
在匹配字符串前显示 4 行 |
-C |
grep -C 5 ‘Exception’ error.log |
在匹配字符串周围显示 5 行 |
-r |
grep -r ‘github.io’ /var/log/nginx/ |
递归搜索 (在子目录内) |
-v |
grep -v ‘warning’ /var/log/syslog |
返回所有与模式不匹配的行 |
-e |
grep -e ‘^al’ filename |
使用正则表达式 (以’al’开头的行) |
-E |
grep -E ‘ja(s|cks)on’ filename |
扩展正则表达式 (包含 jason 或 jackson 的行) |
-c |
grep -c ‘error’ /var/log/syslog |
计算匹配数 |
-l |
grep -l ‘robot’ /var/log/* |
打印匹配文件的名称 |
-o |
grep -o search_string filename |
只显示字符串的匹配部分 |
-n |
grep -n “go” demo.txt |
显示匹配的行号 |
Grep 正则表达式
参考
有关更复杂的要求,请参阅完整版的正则表达式备忘单。
通配符(Wildcards)
:- |
:- |
. |
任何字符 |
? |
可选且只能出现一次 |
* |
可选的,可以多次出现 |
+ |
必需并且可以多次出现 |
量词(Quantifiers)
:- |
:- |
{n} |
前一项恰好出现 n 次 |
{n,} |
上一个项目出现 n 次或更多 |
{,m} |
上一个项目最多出现 n 次 |
{n,m} |
上一项出现在 n 到 m 次之间 |
POSIX
:- |
:- |
[:alpha:] |
任何大小写字母 |
[:digit:] |
任何数字 |
[:alnum:] |
任何大小写字母或数字 |
[:space:] |
任何空格 |
字符串
:- |
:- |
[A-Za-z] |
任何大小写字母 |
[0-9] |
任何数字 |
[0-9A-Za-z] |
任何大小写字母或数字 |
位置
:- |
:- |
^ |
行的开头 |
$ |
行结束 |
^$ |
空行 |
\< |
词的开头 |
\> |
词尾 |
更多示例
搜索命令行历史记录
输入过 git
命令的记录
搜索多个文件并查找匹配文本在哪些文件中
1
| grep -l "text" file1 file2 file3...
|
多级目录中对文本进行递归搜索
.
表示当前目录。
搜索结果中包括或者排除指定文件
1 2 3 4 5 6 7 8 9
|
grep "main()" . -r --include *.{php,html}
grep "main()" . -r --exclude "README"
grep "main()" . -r --exclude-from filelist
|
输出包含匹配字符串的行数 -n 选项
1 2 3 4 5 6
| grep "text" -n file_name
cat file_name | grep "text" -n
grep "text" -n file_1 file_2
|
忽略匹配样式中的字符大小写
1 2
| echo "hello world" | grep -i "HELLO"
|
统计文件或文本中包含匹配字符串的行数 -c 选项
1
| grep -c "text" file_name
|
另见