grep
是 Unix/Linux 系统中一个强大的文本搜索工具,用于在文件或标准输入中查找与给定模式匹配的行。它会根据你指定的模式(通常是正则表达式)来过滤输入并显示符合条件的行。以下是 grep
命令的详细解释,包括常用选项和用法示例。
基本用法:
grep [选项] 模式 文件
- 模式:可以是字符串或正则表达式,用来匹配你想要查找的内容。
- 文件:表示要查找的文件,如果没有指定文件,则默认从标准输入(如键盘输入或管道)读取。
常用选项:
-i
:忽略大小写,例如:grep -i "pattern" file.txt
-v
:反转匹配,即显示不匹配的行,例如:grep -v "pattern" file.txt
-r
或-R
:递归查找目录中的文件,例如:grep -r "pattern" /path/to/directory/
-n
:显示匹配行的行号,例如:grep -n "pattern" file.txt
-l
:显示匹配到的文件名,而不显示具体内容,例如:grep -l "pattern" *.txt
-c
:统计匹配的行数,例如:grep -c "pattern" file.txt
-o
:只输出匹配到的部分,而不是整行,例如:grep -o "pattern" file.txt
-A N
:显示匹配行以及匹配行后 N 行,例如:grep -A 2 "pattern" file.txt
-B N
:显示匹配行以及匹配行前 N 行,例如:grep -B 2 "pattern" file.txt
-C N
:显示匹配行及其前后 N 行,例如:grep -C 2 "pattern" file.txt
-w
:匹配整词,确保匹配的是整个单词,而不是单词的一部分,例如:grep -w "word" file.txt
--color
:高亮显示匹配的部分,一般系统默认启用,例如:grep --color "pattern" file.txt
例子:
基本查找:
grep "hello" file.txt
查找
file.txt
中包含 "hello" 的行。递归查找:
grep -r "hello" /path/to/directory/
递归查找目录
/path/to/directory/
中所有文件包含 "hello" 的行。忽略大小写查找:
grep -i "HELLO" file.txt
忽略大小写查找 "HELLO" 或 "hello" 或任何大小写组合的匹配项。
显示匹配及其上下文:
grep -C 3 "error" logfile.txt
查找 "error" 并显示匹配行及其前后 3 行。
统计匹配的行数:
grep -c "error" logfile.txt
统计
logfile.txt
中包含 "error" 的行数。只显示匹配到的文件名:
grep -l "error" *.log
在当前目录下的所有
.log
文件中查找包含 "error" 的文件,并只显示文件名。排除包含特定模式的行:
grep -v "warning" logfile.txt
显示
logfile.txt
中不包含 "warning" 的行。匹配整词:
grep -w "is" file.txt
只匹配单词 "is",不会匹配 "this" 或 "inside"。
查找多个模式(使用正则表达式):
grep -E "pattern1|pattern2" file.txt
使用
-E
选项启用扩展正则表达式,查找匹配 "pattern1" 或 "pattern2" 的行。从命令输出中过滤:
ps aux | grep "nginx"
通过管道过滤
ps aux
的输出,显示包含 "nginx" 的进程信息。
正则表达式支持:
grep
支持基本的和扩展的正则表达式模式匹配。以下是一些常用的正则表达式示例:
^pattern
:匹配以pattern
开头的行。pattern$
:匹配以pattern
结尾的行。.
:匹配任意单个字符。*
:匹配前面的字符任意次。[abc]
:匹配a
,b
,或c
中的任意一个字符。[^abc]
:匹配不包含a
,b
或c
的字符。
例如:
grep "^start" file.txt
查找以 "start" 开头的行。
grep "end$" file.txt
查找以 "end" 结尾的行。
实际使用示例:
cat /userdata/log/mcu/message | grep Version