grep命令

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选项
  • 对于复杂的搜索模式,考虑使用awksed等更专业的工具