Linux基本命令篇 —— grep命令

grep是Linux/Unix系统中一个非常强大的文本搜索工具,它的名字来源于"Global Regular Expression Print"(全局正则表达式打印)。grep命令用于在文件中搜索包含特定模式的行,并将匹配的行打印出来。

目录

一、基本语法

二、常用选项

三、基本用法示例

在文件中搜索字符串

忽略大小写搜索

显示匹配行的行号

统计匹配行数

递归搜索目录

反向匹配(显示不包含模式的行)

搜索多个文件

使用通配符搜索多个文件

四、高级用法

使用正则表达式

显示匹配行及其前后内容

搜索压缩文件

管道结合使用

使用扩展正则表达式

高亮显示匹配结果

五、实际应用场景

查找日志中的错误信息

统计代码中某个函数出现的次数

查找包含特定IP地址的日志行

查找空行

查找非空行

在多文件中查找并显示文件名


一、基本语法

bash 复制代码
grep [选项] 模式 [文件...]

二、常用选项

选项 描述
-i 忽略大小写
-v 反向匹配,显示不包含模式的行
-n 显示匹配行的行号
-c 只显示匹配的行数
-l 只显示包含匹配项的文件名
-L 只显示不包含匹配项的文件名
-r-R 递归搜索子目录
-w 匹配整个单词
-A n 显示匹配行及其后n行
-B n 显示匹配行及其前n行
-C n 显示匹配行及其前后各n行
-E 使用扩展正则表达式(等同于egrep)
-F 将模式视为固定字符串而非正则表达式(等同于fgrep)
--color 高亮显示匹配部分

三、基本用法示例

在文件中搜索字符串

bash 复制代码
grep "search_pattern" file.txt


2.

忽略大小写搜索

bash 复制代码
grep -i "pattern" file.txt


3.

显示匹配行的行号

bash 复制代码
grep -n "pattern" file.txt


4.

统计匹配行数

bash 复制代码
grep -c "pattern" file.txt


5.

递归搜索目录

bash 复制代码
grep -r "pattern" /path/to/directory


6.

反向匹配(显示不包含模式的行)

bash 复制代码
grep -v "pattern" file.txt


7.

搜索多个文件

bash 复制代码
grep "pattern" file1.txt file2.txt


8.

使用通配符搜索多个文件

bash 复制代码
grep "pattern" *.log

四、高级用法

使用正则表达式

bash 复制代码
grep "^start" file.txt      # 匹配以"start"开头的行
grep "end$" file.txt        # 匹配以"end"结尾的行
grep "[0-9]" file.txt       # 匹配包含数字的行

显示匹配行及其前后内容

bash 复制代码
grep -A 2 "pattern" file2.txt  # 显示匹配行及后2行
grep -B 2 "pattern" file2.txt  # 显示匹配行及前2行
grep -C 2 "pattern" file2.txt  # 显示匹配行及前后各2行


3.

搜索压缩文件

bash 复制代码
zgrep "pattern" file.gz      # 搜索gzip压缩文件
bzgrep "pattern" file.bz2    # 搜索bzip2压缩文件

管道结合使用

bash 复制代码
cat file.txt | grep -v "exclude_"


5.

使用扩展正则表达式

bash 复制代码
grep -E "pattern1|pattern2" file.txt  # 匹配pattern1或pattern2


6.

高亮显示匹配结果

bash 复制代码
grep --color=auto "pattern" file.txt

五、实际应用场景

查找日志中的错误信息

bash 复制代码
grep -i "error" /var/log/syslog

统计代码中某个函数出现的次数

bash 复制代码
grep -c "function_name" *.c

查找包含特定IP地址的日志行

bash 复制代码
grep "192\.168\.1\.100" /var/log/auth.log

查找空行

bash 复制代码
grep "^$" file.txt

查找非空行

bash 复制代码
grep -v "^$" file.txt

在多文件中查找并显示文件名

bash 复制代码
grep -l "main" *.c