Skip to main content

grep

grep 命令基本用法(Global Regular Expression Print)

grep 是 Linux/Unix 下最常用、最强大的文本搜索工具,用于在文件或文本流中查找匹配模式(pattern)的行。

1. 基本语法​

grep [选项] 模式 [文件...]
  • 模式:可以是普通字符串,也可以是正则表达式。
  • 文件:可以是一个或多个文件,也可以省略(从标准输入读取)。

2. 最常用选项​

选项含义示例
-i忽略大小写grep -i "error" log.txt
-r / -R递归搜索目录(含子目录)grep -r "TODO" .
-v反向匹配(显示不匹配的行)grep -v "debug" app.log
-n显示行号grep -n "function" script.sh
-c只显示匹配的行数(计数)grep -c "success" result.txt
-l只显示包含匹配的文件名grep -l "error" *.log
-w匹配整个单词grep -w "word" file.txt
-o只显示匹配的部分(不是整行)grep -o "http://[^ ]*" file.txt
-E使用扩展正则(ERE),支持 `+() ` 等
-F固定字符串(不作为正则)grep -F "[error]" log.txt
-A n显示匹配行之后 n 行grep -A 3 "error" log.txt
-B n显示匹配行之前 n 行grep -B 3 "error" log.txt
-C n显示匹配行前后各 n 行grep -C 5 "error" log.txt
--color=auto高亮显示匹配部分通常放在 alias 中

3. 常用示例​

# 1. 基本搜索
grep "hello" file.txt

# 2. 忽略大小写 + 显示行号
grep -in "error" app.log

# 3. 递归搜索当前目录及子目录
grep -r "TODO" .

# 4. 搜索多个文件
grep "main" *.c

# 5. 管道使用(最强大)
ps aux | grep "nginx"
cat /var/log/syslog | grep -i "failed"

# 6. 排除某些文件
grep -r --include="*.py" "def main" .
grep -r --exclude="*.log" "error" .

# 7. 正则表达式示例
grep "^#include" *.h # 以 #include 开头
grep -E "[0-9]{1,3}\.[0-9]{1,3}" log # 简单 IP 匹配
grep -oE "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b" file.txt # 提取邮箱

4. 实用技巧​

  • 高亮颜色(推荐加入 ~/.bashrc):

    alias grep='grep --color=auto'
  • 查找代码中特定函数:

    grep -n "def " *.py # Python
    grep -n "^func " *.go # Go
  • 统计出现次数(按文件):

    grep -c "pattern" *.log
  • 查找后实时监控日志:

    tail -f app.log | grep --line-buffered "ERROR"

5. 常见组合​

# 最常用组合(强烈推荐)
grep -rn "搜索内容" . --include="*.{js,ts,py,java}" --color

# 只看文件名
grep -rl "旧内容" . | xargs sed -i 's/旧内容/新内容/g'

提示:grep + find + xargs 是 Linux 下文本处理最强组合之一。