Linux grep命令是GNU核心工具集里的重要成员,全称为Global Regular Expression Print,核心作用是在给定的文件内容或者标准输入流中,筛选出符合指定匹配规则的文本行并输出,是Linux环境下文本检索的核心工具之一。

grep命令的基本语法
grep命令的基础使用格式如下:
grep [选项参数] 匹配模式 [目标文件...]
其中匹配模式可以是普通字符串,也可以是正则表达式,目标文件如果不指定,默认从标准输入读取内容。
grep命令的核心作用
1. 快速检索文件内容
这是grep最基础的作用,比如我们需要在一个配置文件中查找包含特定配置项的行,不需要手动逐行翻阅,直接用grep就能快速定位。
例如查找/etc/ssh/sshd_config文件中包含Port的行:
grep "Port" /etc/ssh/sshd_config
2. 支持正则表达式匹配
grep支持正则表达式,能够处理更复杂的匹配需求,比如查找所有以数字开头的行,或者匹配符合特定格式的字符串。
例如查找当前目录下test.txt文件中以数字开头的行:
grep "^[0-9]" test.txt
3. 批量检索多个文件
grep可以同时对多个文件进行检索,还能递归检索目录下的所有文件,适合在大量日志文件或者项目代码中查找目标内容。
例如递归查找/var/log目录下所有包含error的日志行:
grep -r "error" /var/log
4. 结合管道实现流式处理
grep可以和Linux其他命令通过管道结合使用,对前一个命令的输出结果进行过滤,这是shell脚本中非常常见的用法。
例如查看当前系统中运行的包含nginx的进程:
ps -ef | grep "nginx"
常用参数说明
grep有很多实用参数,以下是使用频率较高的几个:
- -i:忽略匹配时的大小写差异
- -n:输出匹配行的同时显示行号
- -v:反向匹配,输出不包含匹配模式的行
- -r:递归检索目录下的所有文件
- -c:只输出匹配到的行数,不输出具体内容
使用示例
假设我们有一个user_list.txt文件,内容如下:
1,张三,18 2,李四,20 3,王五,18 4,赵六,22
如果要查找所有年龄为18的用户行,同时显示行号,命令如下:
grep -n "18" user_list.txt
输出结果会是:
1:1,张三,18 3:3,王五,18
如果要查找不包含18的行,使用-v参数即可:
grep -v "18" user_list.txt