Linux
中的 grep
命令是文本搜索工具命令,其名称源自 Global Regular Expression Print
(全局正则表达式打印)的缩写。grep
命令能够对指定的文件或标准输入进行搜索,并输出包含匹配文本的行。
文章目录
基本语法:
grep [options] pattern [files]
[options]
:可选参数,用于定制grep的功能。pattern
:要搜索的字符串,可以是普通字符串或正则表达式。[files]
:可选参数,要搜索的文件名或路径。如果省略,则默认从标准输入读取(通常配合管道符|
使用)。
一、常见用法
01、搜索文件中的文本
查找文件 example.txt
中包含 error
的行。
grep "error" example.txt
02、忽略大小写搜索
查找 Warning
或 warning
的行。
grep -i "warning" example.txt
03、在多个文件中搜索
查找目录 logs/
中所有文件中包含 failed
的行。
grep "failed" logs/*
04、显示匹配的行号
查找并显示行号。
grep -n "TODO" main.py
05、反向匹配
显示文件中不包含“success”的行。
grep -v "success" example.txt
06、递归搜索
在当前目录及其子目录中查找包含 DEBUG
的行。
grep -r "DEBUG" .
07、显示上下文行
显示匹配行及其前两行和后两行。
grep -C 2 "critical error" system.log
08、只显示文件名
如果只想知道哪些文件包含“import”而不是具体行。
grep -l "import" *.py
09、查找日志文件中的错误信息
在处理大型日志文件时,查找包含 ERROR
、WARNING
或 CRITICAL
的行。
grep -E "ERROR|WARNING|CRITICAL" application.log
10、查找IP地址
假设有一个网络日志文件,提取其中的所有 IP
地址。
grep -oE "[0-9]{1,3}(\.[0-9]{1,3}){3}" network.log
11、统计关键字出现次数
统计“failure”在文件中出现的次数。
grep -c "failure" example.txt
12、查找多种文件中的函数定义
查找 .c
或 .h
文件中所有以 int
开头的函数定义,使用递归搜索并且只输出匹配的行。
grep -r -E "^int .*\(.*\)" --include=*.{c,h}
13、查找不包含特定字符串的文件
找到当前目录中所有不包含 DEBUG
的 .log
文件。
grep -rL "DEBUG" --include=*.log
二、常用参数解析
-i
:忽略大小写- 使用了该参数后,
grep
命令将不区分大小写。 - 例如,
grep -i “hello” file.txt
将匹配hello
、Hello
、HELLO
等。
- 使用了该参数后,
-v
:反向匹配- 使用该参数后,
grep
命令将输出不包含指定字符串的行。 - 例如,
grep -v “error” file.txt
将输出不包含error
字符串的所有行。
- 使用该参数后,
-r
或-R
:递归查找- 使用该参数后,
grep
命令将在指定目录下递归地查找匹配的文件。 - 例如,
grep -r “keyword” /path/to/directory
将在目录下的所有文件中查找包含关键字keyword
的行。
- 使用该参数后,
-n
:显示行号- 使用该参数后,
grep
命令将在输出结果中显示匹配行的行号。 - 例如,
grep -n “pattern” file.txt
将显示文件中包含pattern
的行号和内容。
- 使用该参数后,
-l
:只显示文件名- 使用该参数后,
grep
命令将只显示包含匹配字符串的文件名,而不显示具体匹配内容。 - 例如,
grep -l “keyword” file*.txt
将只显示包含关键字keyword
的文件名。
- 使用该参数后,
-c
:显示匹配的行数- 使用该参数后,
grep
命令将统计文件中包含匹配字符串的行数。 - 例如,
grep -c “pattern” file.txt
将显示文件中包含pattern
的行数。
- 使用该参数后,
-w
:只匹配整个单词- 默认情况下,
grep
会匹配含有模式的行,使用-w
选项可以让grep
只匹配整个单词。
- 默认情况下,
-x
:使用这个选项可以确保只输出完全匹配的行。-A num
:显示匹配行及其后num行的内容-B num
:显示匹配行及其前num行的内容。-C num
:显示匹配行及其前后num行的内容。-F
:将模式视为固定字符串而非正则表达式。-E
:使用扩展正则表达式(相当于egrep
)。-o
:只显示匹配的字符串(而不是整行)。-L
:输出不包含匹配内容的文件名。--color
:高亮显示匹配的文本,便于快速定位。
三、正则表达式
grep
命令支持使用正则表达式进行模式匹配,以下是一些常用的正则表达式的表示方法:
.
(点号):表示匹配任意单个字符。*
(星号):表示匹配前面的字符出现0次或多次。?
:表示匹配前面的字符出现0次或1次。[]
:用于表示匹配方括号内的任意一个字符。^
(脱字符):表示匹配行首。$
(美元符号):表示匹配行尾。<
:匹配单词首。>
:匹配单词尾。{n}
:匹配恰好n个前导字符。{n,}
:匹配至少n个前导字符。{n,m}
:匹配至少n个且不超过m个前导字符。|
:或运算符。
四、提高效率的小技巧
- 使用
--color=auto
:高亮显示匹配的文本,便于快速定位。 - 结合
tee
保存搜索结果:将输出结果保存到文件中,并在终端中同时显示。 - 例如,
grep "pattern" file.txt | tee results.txt
。
通过掌握 grep
命令及其选项和正则表达式的使用,用户可以高效地查找文件、分析日志、提取信息等。