grep是Linux/Unix系统中一个非常强大的文本搜索工具,它的名字来源于"Global Regular Expression Print"(全局正则表达式打印)。grep命令用于在文件中搜索包含特定模式的行,并将匹配的行打印出来。
目录
一、基本语法
二、常用选项
三、基本用法示例
在文件中搜索字符串
忽略大小写搜索
显示匹配行的行号
统计匹配行数
递归搜索目录
反向匹配(显示不包含模式的行)
搜索多个文件
使用通配符搜索多个文件
四、高级用法
使用正则表达式
显示匹配行及其前后内容
搜索压缩文件
管道结合使用
使用扩展正则表达式
高亮显示匹配结果
五、实际应用场景
查找日志中的错误信息
统计代码中某个函数出现的次数
查找包含特定IP地址的日志行
查找空行
查找非空行
在多文件中查找并显示文件名
一、基本语法
grep [选项] 模式 [文件...]
二、常用选项
选项 | 描述 |
---|---|
-i | 忽略大小写 |
-v | 反向匹配,显示不包含模式的行 |
-n | 显示匹配行的行号 |
-c | 只显示匹配的行数 |
-l | 只显示包含匹配项的文件名 |
-L | 只显示不包含匹配项的文件名 |
-r 或 -R | 递归搜索子目录 |
-w | 匹配整个单词 |
-A n | 显示匹配行及其后n行 |
-B n | 显示匹配行及其前n行 |
-C n | 显示匹配行及其前后各n行 |
-E | 使用扩展正则表达式(等同于egrep) |
-F | 将模式视为固定字符串而非正则表达式(等同于fgrep) |
--color | 高亮显示匹配部分 |
三、基本用法示例
-
在文件中搜索字符串
grep "search_pattern" file.txt
-
忽略大小写搜索
grep -i "pattern" file.txt
-
显示匹配行的行号
grep -n "pattern" file.txt
-
统计匹配行数
grep -c "pattern" file.txt
-
递归搜索目录
grep -r "pattern" /path/to/directory
-
反向匹配(显示不包含模式的行)
grep -v "pattern" file.txt
-
搜索多个文件
grep "pattern" file1.txt file2.txt
-
使用通配符搜索多个文件
grep "pattern" *.log
四、高级用法
-
使用正则表达式
grep "^start" file.txt # 匹配以"start"开头的行 grep "end$" file.txt # 匹配以"end"结尾的行 grep "[0-9]" file.txt # 匹配包含数字的行
-
显示匹配行及其前后内容
grep -A 2 "pattern" file2.txt # 显示匹配行及后2行 grep -B 2 "pattern" file2.txt # 显示匹配行及前2行 grep -C 2 "pattern" file2.txt # 显示匹配行及前后各2行
-
搜索压缩文件
zgrep "pattern" file.gz # 搜索gzip压缩文件 bzgrep "pattern" file.bz2 # 搜索bzip2压缩文件
-
管道结合使用
cat file.txt | grep -v "exclude_"
-
使用扩展正则表达式
grep -E "pattern1|pattern2" file.txt # 匹配pattern1或pattern2
-
高亮显示匹配结果
grep --color=auto "pattern" file.txt
五、实际应用场景
-
查找日志中的错误信息
grep -i "error" /var/log/syslog
-
统计代码中某个函数出现的次数
grep -c "function_name" *.c
-
查找包含特定IP地址的日志行
grep "192\.168\.1\.100" /var/log/auth.log
-
查找空行
grep "^$" file.txt
-
查找非空行
grep -v "^$" file.txt
-
在多文件中查找并显示文件名
grep -l "main" *.c