本备忘单旨在快速提醒使用命令行程序 grep 所涉及的主要概念,并假设您已经了解其用法。
搜索标准输出(即文本流)
$ grep [options] search_string
在文件中搜索确切的字符串:
$ grep [options] search_string path/to/file
打印 myfile.txt 中包含字符串“mellon”的行
$ 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 | 显示匹配的行号 | 
有关更复杂的要求,请参阅完整版的正则表达式备忘单。
| :- | :- | 
|---|---|
| . | 任何字符 | 
| ? | 可选且只能出现一次 | 
| * | 可选的,可以多次出现 | 
| + | 必需并且可以多次出现 | 
| :- | :- | 
|---|---|
| {n} | 前一项恰好出现 n 次 | 
| {n,} | 上一个项目出现 n 次或更多 | 
| {,m} | 上一个项目最多出现 n 次 | 
| {n,m} | 上一项出现在 n 到 m 次之间 | 
| :- | :- | 
|---|---|
| [:alpha:] | 任何大小写字母 | 
| [:digit:] | 任何数字 | 
| [:alnum:] | 任何大小写字母或数字 | 
| [:space:] | 任何空格 | 
| :- | :- | 
|---|---|
| [A-Za-z] | 任何大小写字母 | 
| [0-9] | 任何数字 | 
| [0-9A-Za-z] | 任何大小写字母或数字 | 
| :- | :- | 
|---|---|
| ^ | 行的开头 | 
| $ | 行结束 | 
| ^$ | 空行 | 
| \< | 词的开头 | 
| \> | 词尾 | 
history | grep git
输入过 git 命令的记录
grep -l "text" file1 file2 file3...
grep "text" . -r -n
. 表示当前目录。
# 目录中所有的 .php 和 .html 文件中
# 递归搜索字符 "main()"
grep "main()" . -r --include *.{php,html}
# 在搜索结果中排除所有 README 文件
grep "main()" . -r --exclude "README"
# 在搜索结果中排除 filelist 文件列表里的文件
grep "main()" . -r --exclude-from filelist
grep "text" -n file_name
# 或
cat file_name | grep "text" -n
#多个文件
grep "text" -n file_1 file_2
echo "hello world" | grep -i "HELLO"
# hello
grep -c "text" file_name