Linux grep命令教程

Linux grep 命令教程

grep 是 Linux 中非常常用的文本搜索工具。它用于在文件中查找符合条件的行,并支持正则表达式匹配。通过掌握 grep 命令,你可以高效地查找文件、分析日志、提取信息等。

1. grep 基本语法

grep [选项] 搜索模式 [文件...]
  • 搜索模式:用于匹配的文本或正则表达式。
  • 文件:指定要搜索的目标文件。如果省略,则默认从标准输入读取(通常配合管道符 | 使用)。

2. 常用选项

  • -i:忽略大小写(case-insensitive)。
  • -v:反转匹配(显示未匹配的行)。
  • -r / -R:递归搜索目录中的所有文件。
  • -n:显示匹配行的行号。
  • -c:只显示匹配的行数。
  • -l:只输出包含匹配内容的文件名。
  • -L:输出不包含匹配内容的文件名。
  • -o:只显示匹配的字符串(而不是整行)。
  • -E:使用扩展正则表达式(相当于 egrep)。
  • -w:匹配整个单词(而不是部分单词)。
  • -A [数字]:显示匹配行及其后面几行(after context)。
  • -B [数字]:显示匹配行及其前面几行(before context)。
  • -C [数字]:显示匹配行及其前后几行(context)。

3. 基本用法示例

3.1 搜索文件中的文本

查找文件 example.txt 中包含 “error” 的行:

grep "error" example.txt

3.2 忽略大小写搜索

查找 “Warning” 或 “warning” 的行:

grep -i "warning" example.txt

3.3 在多个文件中搜索

查找目录 logs/ 中所有文件中包含 “failed” 的行:

grep "failed" logs/*

3.4 显示匹配的行号

查找并显示行号:

grep -n "TODO" main.py

3.5 反向匹配

显示文件中不包含 “success” 的行:

grep -v "success" example.txt

3.6 递归搜索

在当前目录及其子目录中查找包含 “DEBUG” 的行:

grep -r "DEBUG" .

3.7 显示上下文行

显示匹配行及其前两行和后两行:

grep -C 2 "critical error" system.log

3.8 只显示文件名

如果只想知道哪些文件包含 “import” 而不是具体行:

grep -l "import" *.py

3.9 使用正则表达式

查找形如 “root” 开头,后接任意字符,再接一个数字的行:

grep "^root.*[0-9]" passwd.txt

4. 实战场景

4.1 查找日志文件中的错误信息

通常在处理大型日志文件时,你可能只需要查找包含 “ERROR”、“WARNING” 或 “CRITICAL” 的行,可以使用如下命令:

grep -E "ERROR|WARNING|CRITICAL" application.log

4.2 查找 IP 地址

假设你有一个网络日志文件,想要提取其中的所有 IP 地址:

grep -oE "[0-9]{1,3}(\.[0-9]{1,3}){3}" network.log

4.3 统计关键字出现次数

如果你想知道 “failure” 在文件中出现了多少次:

grep -c "failure" example.txt

4.4 查找多种文件中的函数定义

要查找 .c.h 文件中所有以 int 开头的函数定义,可以使用递归搜索并且只输出匹配的行:

grep -r -E "^int .*\(.*\)" --include=\*.{c,h}

4.5 查找不包含特定字符串的文件

要找到当前目录中所有不包含 “DEBUG” 的 .log 文件,可以使用:

grep -rL "DEBUG" --include=\*.log

4.6 使用管道符组合其他命令

grep 与其他命令组合可以发挥更大作用。例如,列出当前目录下大于 1MB 的文件中包含 “TODO” 的行:

find . -type f -size +1M | xargs grep "TODO"

4.7 查找环境变量中的指定值

假设你想在环境变量中查找包含 “PATH” 的行,可以使用:

printenv | grep "PATH"

5. grep 的正则表达式速查表

5.1 基本元字符

字符含义
.匹配任意单个字符(换行符除外)
^匹配行的开头
$匹配行的结尾
*匹配前一个字符零次或多次
+匹配前一个字符一次或多次
?匹配前一个字符零次或一次
``
[]匹配括号内的任意字符
()分组匹配

5.2 常用转义字符

字符含义
\d匹配任意数字
\w匹配任意字母、数字或下划线
\s匹配任意空白符(包括空格、制表符等)
\b匹配单词边界
\转义符(例如:\. 匹配 “.”)

6. 高级用法:使用 grep 过滤 git 输出

在开发过程中,你可能希望过滤 git 的输出信息。比如查找当前分支上所有被修改文件中包含 “FIXME” 的行:

git grep "FIXME"

也可以查找过去提交中(commit history)包含 “urgent” 的所有变更:

git log -p | grep "urgent"

7. 提高效率的小技巧

  • 使用 --color=auto:高亮显示匹配的文本,便于快速定位:

    grep --color=auto "pattern" file.txt
    
  • 结合 tee 保存搜索结果:将输出结果保存到文件中,并在终端中同时显示:

    grep "pattern" file.txt | tee results.txt
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值