grep 命令 #
grep
命令是一个强大的文本搜索工具,用于在文件中搜索匹配指定模式的行。它的名称来源于全局正则表达式打印(Global Regular Expression Print)的缩写。
语法 #
grep [选项] 模式 [文件...]
常用选项 #
选项 | 描述 |
---|---|
-i |
忽略大小写 |
-v |
反向匹配,显示不匹配的行 |
-n |
显示匹配行的行号 |
-r 或 -R |
递归搜索目录 |
-l |
只显示包含匹配的文件名 |
-c |
只显示匹配的行数 |
-w |
只匹配整个单词 |
-A n |
显示匹配行及其后 n 行 |
-B n |
显示匹配行及其前 n 行 |
-C n |
显示匹配行及其前后各 n 行 |
-E |
使用扩展正则表达式 |
-F |
将模式视为固定字符串,而不是正则表达式 |
--color=auto |
高亮显示匹配的文本 |
常见用法 #
1. 在文件中搜索字符串 #
grep "search_string" filename
输出示例:
this line contains the search_string we're looking for
2. 忽略大小写搜索 #
grep -i "search_string" filename
这会匹配"search_string"、“Search_String”、“SEARCH_STRING"等。
3. 在多个文件中搜索 #
grep "search_string" file1 file2 file3
输出示例:
file1:this line contains the search_string we're looking for
file3:another line with search_string in it
4. 递归搜索目录 #
grep -r "search_string" /path/to/directory
5. 显示匹配行的行号 #
grep -n "search_string" filename
输出示例:
5:this line contains the search_string we're looking for
6. 只显示匹配的文件名 #
grep -l "search_string" file1 file2 file3
输出示例:
file1
file3
7. 显示不匹配的行 #
grep -v "search_string" filename
8. 只匹配整个单词 #
grep -w "word" filename
这会匹配"word”,但不会匹配"password"或"wordprocessor"。
9. 显示匹配行及其上下文 #
grep -A 2 -B 2 "search_string" filename # 显示匹配行及其前后各2行
或
grep -C 2 "search_string" filename # 同上
10. 使用正则表达式 #
grep -E "pattern1|pattern2" filename # 匹配pattern1或pattern2
11. 计算匹配的行数 #
grep -c "search_string" filename
12. 从标准输入读取 #
command | grep "search_string"
例如:
ls -l | grep "\.txt" # 列出当前目录中的所有txt文件
13. 使用固定字符串(不使用正则表达式) #
grep -F "special*chars" filename
14. 高亮显示匹配 #
grep --color=auto "search_string" filename
正则表达式示例 #
模式 | 描述 | 示例 |
---|---|---|
^pattern |
匹配行首的 pattern | grep "^The" filename |
pattern$ |
匹配行尾的 pattern | grep "end$" filename |
. |
匹配任意单个字符 | grep "c.t" filename 匹配"cat"、“cot"等 |
* |
匹配前一个字符零次或多次 | grep "ca*t" filename 匹配"ct”、“cat”、“caat"等 |
[] |
匹配方括号中的任意一个字符 | grep "[Cc]at" filename 匹配"Cat"或"cat” |
[^] |
匹配不在方括号中的任意字符 | grep "[^A-Z]" filename 匹配非大写字母 |
\ |
转义特殊字符 | grep "\." filename 匹配点号 |
{n} |
匹配前一个字符恰好 n 次 | grep "a{3}" filename 匹配"aaa" |
{n,m} |
匹配前一个字符 n 到 m 次 | grep "a{2,4}" filename 匹配"aa"、“aaa"或"aaaa” |
\< |
匹配单词开头 | grep "\<cat" filename 匹配以"cat"开头的单词 |
\> |
匹配单词结尾 | grep "cat\>" filename 匹配以"cat"结尾的单词 |
提示 #
- 在大多数 Linux 发行版中,
grep
命令默认已配置为grep --color=auto
的别名,以高亮显示匹配 - 使用
grep -E
(或egrep
)可以使用扩展正则表达式,更加强大 - 对于非常大的文件,使用
grep
比使用文本编辑器搜索更高效 - 组合使用
grep
和其他命令可以创建强大的文本处理管道:cat log.txt | grep "ERROR" | grep -v "DEBUG" | sort | uniq -c
- 使用
grep -r
搜索代码库中的特定函数或变量非常有用 - 如果需要搜索二进制文件,可以使用
grep -a
选项 - 对于复杂的搜索模式,考虑使用
awk
或sed
等更专业的工具