linux grep用法大全

原文:http://orchidllh.itpub.net/post/4020/24280


在Unix中经常会用到grep去选取所需要的信息,用好grep有时可以到达意想不到的效果。  


Grep : g (globally) search for a re (regular expression_r_r ) and p (print ) the results.

1、参数:
-I :忽略大小写
-c :打印匹配的行数
-l :从多个文件中查找包含匹配项
-v :查找不包含匹配项的行
-n:打印包含匹配项的行和行标

2、RE(正则表达式)
\ 忽略正则表达式中特殊字符的原有含义
^ 匹配正则表达式的开始行
$ 匹配正则表达式的结束行
\< 从匹配正则表达式的行开始
\>; 到匹配正则表达式的行结束
[ ] 单个字符;如[A] 即A符合要求
[ - ] 范围 ;如[A-Z]即A,B,C一直到Z都符合要求
. 所有的单个字符
* 所有字符,长度可以为0

# cat zhao.conf(显示我们所查文件的内容)
48 Dec 3BC1997 LPSX 68.00 LVX2A 138
483 Sept 5AP1996 USP 65.00 LVX2C 189
47 Oct 3ZL1998 LPSX 43.00 KVM9D 512
219 dec 2CC1999 CAD 23.00 PLV2C 68
484 nov 7PL1996 CAD 49.00 PLV2C 234
487 may 5PA1998 USP 37.00 KVM9D 644
471 May 7Zh1999 UDP 37.00 KV30D 643


# grep -c "48" zhao.conf(统计所有以“48”字符开头的行有多少)

# grep -i "May" zhao.conf(不区分大小写查找“May”所有的行)
487 may 5PA1998 USP 37.00 KVM9D 644
471 May 7Zh1999 UDP 37.00 KV30D 643

# grep -n "48" zhao.conf(显示行号;显示匹配字符“48”所在的行的行号)
1:48 Dec 3BC1997 LPSX 68.00 LVX2A 138
2:483 Sept 5AP1996 USP 65.00 LVX2C 189
5:484 nov 7PL1996 CAD 49.00 PLV2C 234
6:487 may 5PA1998 USP 37.00 KVM9D 644

# grep -ni "may" zhao.conf(显示行号;显示匹配字符“may”所在的行的行号,不区分大小写)

# grep -v "48" zhao.conf(显示输出没有字符“48”所有的行)
47 Oct 3ZL1998 LPSX 43.00 KVM9D 512
219 dec 2CC1999 CAD 23.00 PLV2C 68
471 May 7Zh1999 UDP 37.00 KV30D 643

# grep "471" zhao.conf(显示输出字符“471”所在的行)
471 May 7Zh1999 UDP 37.00 KV30D 643

# grep "48>" zhao.conf(精确显示输出字符“48”所在的行)
48 Dec 3BC1997 LPSX 68.00 LVX2A 138

# grep "48<tab>" zhao.conf(显示输出以字符“48”开头,并在字符“48”后是一个tab键所在的行
注:tab键,安一下tab键即可;和精确显示输出的结果是相同的)
48 Dec 3BC1997 LPSX 68.00 LVX2A 138

# grep "48[34]" zhao.conf(显示输出以字符“48”开头,第三个字符是“3”或是“4”的所有的行)
483 Sept 5AP1996 USP 65.00 LVX2C 189
484 nov 7PL1996 CAD 49.00 PLV2C 234

# grep '48[34]' zhao.conf(注意使用单引号(‘’)和使用双引号(“”)在Solaris8中输出的结果是一样的;
即:单引号、和双引号是通用的,只要你养成一种习惯就好)
483 Sept 5AP1996 USP 65.00 LVX2C 189
484 nov 7PL1996 CAD 49.00 PLV2C 234

# grep "^[^48]" zhao.conf(显示输出行首不是字符“48”的行)
219 dec 2CC1999 CAD 23.00 PLV2C 68

# grep "[Mm]ay" zhao.conf(设置大小写查找:显示输出第一个字符以“M”或“m”开头,以字符“ay”结束的行)
487 may 5PA1998 USP 37.00 KVM9D 644
471 May 7Zh1999 UDP 37.00 KV30D 643

# cat zhao.conf(再次显示我们所使用的文件的内容)
48 Dec 3BC1997 LPSX 68.00 LVX2A 138
483 Sept 5AP1996 USP 65.00 LVX2C 189
47 Oct 3ZL1998 LPSX 43.00 KVM9D 512
219 dec 2CC1999 CAD 23.00 PLV2C 68
484 nov 7PL1996 CAD 49.00 PLV2C 234
487 may 5PA1998 USP 37.00 KVM9D 644
471 May 7Zh1999 UDP 37.00 KV30D 643

# grep "K...D" zhao.conf(显示输出第一个字符是“K”,第二、三、四是任意字符,第五个字符是“D”所在的行)
47 Oct 3ZL1998 LPSX 43.00 KVM9D 512
487 may 5PA1998 USP 37.00 KVM9D 644
471 May 7Zh1999 UDP 37.00 KV30D 643

# grep "[A-Z][A-Z][A-Z][9]D" zhao.conf(显示输出第一个字符的范围是“A-D”,第二个字符的范围是“A-D”,
第三个字符的范围是“A-D”,第四个字符是“9”,第五个字符的是“D”,所有的行:已知所查字符串的长度为5位)
47 Oct 3ZL1998 LPSX 43.00 KVM9D 512
487 may 5PA1998 USP 37.00 KVM9D 644

# grep "5..1998" zhao.conf
487 may 5PA1998 USP 37.00 KVM9D 644

# grep "[35]..1998" zhao.conf(显示输出第一个字符是“3”或“5”,第二、三个字符是任意,以1998结尾的所 有行;已知所查字符串的长度是7位)
47 Oct 3ZL1998 LPSX 43.00 KVM9D 512
487 may 5PA1998 USP 37.00 KVM9D 644
#

# grep "4{2,}" zhao.conf(模式出现几率查找:显示输出字符“4”至少重复出现两次的所有行)
487 may 5PA1998 USP 37.00 KVM9D 644

# grep "9{3,}" zhao.conf(模式出现几率查找:显示输出字符“9”至少重复出现三次的所有行)
219 dec 2CC1999 CAD 23.00 PLV2C 68
471 May 7Zh1999 UDP 37.00 KV30D 643

# grep "9{2,3}" zhao.conf(模式出现几率查找:显示输出字符“9”重复出现的次数在一定范围内(重复出现2 次或3次)所有行)
48 Dec 3BC1997 LPSX 68.00 LVX2A 138
483 Sept 5AP1996 USP 65.00 LVX2C 189
47 Oct 3ZL1998 LPSX 43.00 KVM9D 512
219 dec 2CC1999 CAD 23.00 PLV2C 68
484 nov 7PL1996 CAD 49.00 PLV2C 234
487 may 5PA1998 USP 37.00 KVM9D 644
471 May 7Zh1999 UDP 37.00 KV30D 643

# grep -n "^$" zhao.conf(显示输出空行的行号)

<think>嗯,用户这次想了解Linuxgrep命令的使用教程。从提供的参考资料看,用户已经收集了多个权威来源(包括菜鸟教程、微学网等),但需要系统化的整理。用户可能是个Linux初学者或需要复习grep用法的开发者,真正的需求是快速掌握核心功能并解决实际问题。用户引用的资料已经覆盖了基础语法和常用选项(如-i忽略大小写、-v反向匹配等),但缺少实例演示和进阶场景。特别是引用[1]中的日志搜索案例很有价值,应该重点展开。我准备这样组织回答:先简述grep的核心功能定位(文本搜索工具),再分板块讲解。基础部分按“语法结构→选项→搜索模式”展开,重点区分普通字符串和正则表达式搜索的不同语法。进阶部分会突出用户提到的管道符组合使用(如日志过滤案例),并补充用户未提及的递归搜索、上下文显示等实用技巧。特别注意避开两个坑:一是引用[3]提到的正则表达式需要单独说明扩展参数-E;二是引用[4]的单词边界匹配选项-w对新手容易混淆,要搭配实例。最后加入日志分析的实际工作场景呼应需求,这样应该能覆盖用户所有潜在问题点。</think> 以下是根据提供的参考资料整理的 Linux `grep` 命令详细教程,包含基础语法、进阶技巧和实际案例: --- ### **一、grep 命令基础** #### 1. **基本语法** ```bash grep [选项] "搜索模式" [文件名] ``` #### 2. **常用选项** | 选项 | 说明 | |------|------| | `-i` | 忽略大小写 | | `-n` | 显示匹配行的行号 | | `-v` | **排除**匹配的行(反向匹配) | | `-r` | 递归搜索目录 | | `-o` | 仅显示匹配的**字符串**(而非整行) | | `-E` | 使用扩展正则表达式(等同于 `egrep`) | | `-w` | 匹配**完整单词**(如搜索 `error` 不会匹配 `error123`) | | `-A num` | 显示匹配行及**之后 num 行** | | `-B num` | 显示匹配行及**之前 num 行** | | `-C num` | 显示匹配行**前后各 num 行** | --- ### **二、核心使用场景与案例** #### 1. **基础搜索** ```bash # 在文件 logs.txt 中查找包含 "error" 的行 grep "error" logs.txt # 忽略大小写查找 "warning" grep -i "warning" logs.txt ``` #### 2. **组合管道符过滤日志**(参考引用[^1]) ```bash # 查找包含 RegSWVersion 且含 "2.0.4" 的行,排除含 "1.1" 的行 grep "RegSWVersion" /root/logs/sys-debug.log | grep "2.0.4" | grep -v "1.1" ``` #### 3. **递归搜索目录** ```bash # 在 /var/log 目录下所有文件中查找 "connection failed" grep -r "connection failed" /var/log ``` #### 4. **正则表达式搜索** ```bash # 查找以数字开头的行(-n 显示行号) grep -n "^[0-9]" data.txt # 使用扩展正则表达式匹配 IP 地址(-E 启用扩展模式) grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" access.log ``` #### 5. **上下文关联查看** ```bash # 显示 "panic" 出现的前后 3 行(用于调试日志) grep -C 3 "panic" /var/log/syslog ``` --- ### **三、实用技巧总结** 1. **文件批量搜索** ```bash # 在所有 .log 文件中查找 "timeout" grep -w "timeout" *.log ``` 2. **统计匹配行数** ```bash grep -c "success" report.txt ``` 3. **搜索后保留匹配内容** ```bash # 将包含 "2024-07" 的日志行保存到新文件 grep "2024-07" system.log > july-errors.log ``` 4. **过滤命令输出** ```bash # 查看运行中的 nginx 进程(排除 grep 自身进程) ps aux | grep nginx | grep -v "grep" ``` > ⚠️ 注:使用正则表达式时,普通模式支持基础符号(如`^`、`$`),复杂模式需加 `-E` 启用扩展支持(如`|`、`()`)。完整的正则语法可参考引用[^3]。 --- ### **实际工作场景应用** - **日志分析**:快速定位错误时间段(如 `grep -n "2024-07-10 14:" /var/log/nginx/error.log`) - **代码调试**:在源码中递归搜索函数名(`grep -r "calculate_score" /src/`) - **安全审计**:检查配置文件中敏感项(`grep -i "password" *.conf`) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值