小小白祈祷中...

grep 是 Linux 和类 Unix 操作系统中一个强大的文本搜索工具,用于在文件或标准输入中查找与指定模式匹配的行。它支持正则表达式,可以快速定位文件中的特定内容。

以下是对 grep 命令的详细介绍,包括基本用法、常用选项和示例。


基本语法

1
grep [选项] "搜索模式" [文件...]
  • 搜索模式:指定要查找的文本模式(可以是字符串或正则表达式)。
  • 文件:要搜索的文件,可以是一个或多个文件。如果不指定文件,则从标准输入(stdin)读取数据。
  • 选项:控制搜索行为,例如忽略大小写、递归搜索、显示行号等。

常用选项

选项 功能
-i 忽略大小写匹配。
-v 反向匹配,显示不符合模式的行。
-r-R 递归搜索目录中的所有文件。
-n 显示匹配行的行号。
-c 仅显示匹配的行数。
-l 仅显示包含匹配内容的文件名。
-L 仅显示不包含匹配内容的文件名。
-o 仅显示匹配的内容(而非整行)。
-w 匹配整个单词。
-x 匹配整行。
-A [行数] 显示匹配行及其后面指定的行数。
-B [行数] 显示匹配行及其前面指定的行数。
-C [行数] 显示匹配行及其前后指定的行数(等价于 -A-B 的组合)。
--color 高亮显示匹配的内容(通常默认启用)。
--include 只搜索匹配的文件类型(如 --include="*.txt")。
--exclude 排除特定文件类型(如 --exclude="*.log")。
--exclude-dir 排除特定目录(如 --exclude-dir="backup")。

详解选项和示例

基本匹配**

  • 在文件中搜索包含 "pattern" 的行:

    1
    grep "pattern" file.txt
  • 示例:
    如果 file.txt 内容为:

    1
    2
    3
    hello world
    grep is powerful
    pattern matching

    输出:

    1
    pattern matching

忽略大小写(-i

  • 忽略大小写匹配:
    1
    grep -i "pattern" file.txt

反向匹配(-v

  • 显示不包含 "pattern" 的行:
    1
    grep -v "pattern" file.txt

递归搜索(-r-R

  • 在当前目录及其子目录中递归搜索 "pattern":
    1
    grep -r "pattern" .

显示行号(-n

  • 显示匹配行及其行号:

    1
    grep -n "pattern" file.txt
  • 输出示例:

    1
    3:pattern matching

仅显示匹配文件名(-l

  • 查找包含 "pattern" 的文件,仅显示文件名:
    1
    grep -l "pattern" *.txt

统计匹配行数(-c

  • 显示文件中匹配的行数:
    1
    grep -c "pattern" file.txt

仅显示匹配内容(-o

  • 仅显示匹配的部分,而不是整行:
    1
    grep -o "pattern" file.txt

匹配整个单词(-w

  • 仅匹配独立的 "pattern" 单词(避免匹配部分单词):
    1
    grep -w "pattern" file.txt

匹配整行(-x

  • 仅匹配整行与 "pattern" 完全一致的行:
    1
    grep -x "pattern" file.txt

显示上下文行(-A-B-C

  • 显示匹配行及其后 2 行(-A):

    1
    grep -A 2 "pattern" file.txt
  • 显示匹配行及其前 2 行(-B):

    1
    grep -B 2 "pattern" file.txt
  • 显示匹配行及其前后 2 行(-C):

    1
    grep -C 2 "pattern" file.txt

排除特定文件或目录

  • 排除特定文件类型:

    1
    grep -r --exclude="*.log" "pattern" .
  • 排除特定目录:

    1
    grep -r --exclude-dir="backup" "pattern" .

结合正则表达式

匹配以 "start" 开头的行:

1
grep "^start" file.txt

匹配以 "end" 结尾的行:

1
grep "end$" file.txt

匹配包含数字的行:

1
grep "[0-9]" file.txt

匹配包含 "error" 或 "fail" 的行:

1
grep -E "error|fail" file.txt

grep 的扩展版本

egrepfgrep

  • egrep 等价于 grep -E,支持扩展正则表达式。
  • fgrep 等价于 grep -F,不支持正则表达式,仅匹配固定字符串。

综合示例

在所有 .log 文件中查找 "error" 并显示行号

1
grep -n "error" *.log

递归查找包含 "TODO" 的文件,排除 backup 目录

1
grep -r --exclude-dir="backup" "TODO" .

查找包含 "https://" 的行,并仅显示匹配内容

1
grep -o "https://[a-zA-Z0-9./?=_-]*" file.txt

在文件中查找错误日志(不区分大小写)并显示上下文 3 行

1
grep -i -C 3 "error" system.log

查找某用户的所有进程

结合 ps 使用:

1
ps aux | grep "username"

统计文件中出现某单词的次数

1
grep -o "word" file.txt | wc -l

查找大写开头的单词

1
grep -o "\b[A-Z][a-z]*\b" file.txt

总结

  • grep 是 Linux 中最常用的文本处理工具之一,适用于从文件或输出中快速搜索指定内容。
  • 通过选项(如 -i-v-r)和正则表达式,可以实现灵活高效的内容过滤。
  • 使用时要注意正则表达式的语法,以及结合 grep 的扩展功能(如 --exclude--include)以优化搜索效率。