一 grep
说明: 本文基于'man grep、info grep'结合'实际案例'讲解
后续: 对比不同'grep版本'的差异性
强调: grep是针对'file'中的'字符串'进行匹配
补充: grep 利用'RER、PCRE'正则风格进行'功能'增强
grep官方手册 GUN的grep
① grep的synax
关注点: 'OPTIONS'、'PATTERN'
② Matcher Selection 匹配方式选择
讲解: grep的正则模式'流派'
可读性: 推荐使用'PCRE'、其次是'ERE','禁止'使用'默认'的'BRE'
BRE的正则系列
掌握: -P、-E、-i 这'三个'选项'即可',重点关注'-P'选项
③ Matching Control 匹配控制
核心关注:'-i'、'-w'、'-x'、'-v'这四个选项
④ General Output Control 通用输出控制
常用: 'grep -rl'、'-o'、'-m [在匹配到NUM行后停止读取文件]'
⑤ Output Line Prefix Control 输出行前缀控制
⑥ Context Line Control 上下文行控制
需求: 使用'空行'作为 grep 的上下文'组分隔符'
--group-separator=""
理解: '-A'、'-B'、'-C'的含义
⑦ File and Directory Selection 文件及目录的选择
常用: grep -r --exclude=GLOB
⑧ 环境变量
关注: GREP_OPTIONS、GREP_COLOR、GREP_COLORS
--color参数可以选择never '永不高亮', always '总是高亮',auto '视场景高视'
grep染色
export GREP_COLOR='a;b' #默认是1;31,即高亮的红色; 您可以根据自己的喜好设置不同的颜色;
'a' 可以选择:【0,1,4,5,7,8】
0 关闭所有属性 1 设置'高亮度' 4 下划线
5 闪烁 7 反显 8 消隐
'b' 可以选择:【30-37或40-47】
30 black --> "黑色" 31 red --> "红色" 32 green --> "绿色"
33 yellow --> "黄色" 34 blue --> "蓝色" 35 purple --> "紫色"
36 cyan --> "青色" 37 white --> ""
30 - 37 设置'前(before)'景色
40 - 47 设置'背(background)'景色
⑨ 案例讲解
需求1: '实时'过滤日志中的'关键字' --> "重点"
形式: tail -f access.log | grep -Eni 'wzj'
备注: 'tailf' 同 'tail -f'
需求2: '关键字'自定义颜色
export GREP_COLOR="01;34"
export GREP_COLOR="01;33;45"
需求3: 获取'实体网卡'的ip
备注: 利用PCRE'正则'的特性
需求4: 理解'整行'匹配的含义 --> '-x'
需求5: 获取'PATTERN'匹配的 only '文本'字符串
grep -Po --> 只显示 access.log日志中的'状态码'
默认: 不指定'-o'选项,会将匹配的字符串'高亮'显示,并打印输出'该行'
-o选项可以使grep只输出'搜索结果的匹配'部分
需求6: 不区分'大小'写
需求7: '取反'操作
需求8: grep'递归'搜索文件内容
1) 案例1: 在一个'目录及其子目录'下面搜索'某个字符串'
2) 案例2: grep'递归'搜索文件内容时'忽略'指定格式文件
备注: --directories=recurse '<==>' -r '递归'搜索
grep排除文件 grep案例学习
需求9: '-c' 选项可以使grep计算'指定字符串'出现的'次数'
需求10: '-l' 选项'只输出'匹配文件的'文件名','不'输出匹配'内容'
需求11: 显示匹配'模式PATTERN'的字符串的'上下文'
备注: 理解'-A、-B、-C' 与 '--group-separator='的关系
需求12: grep 如何'不显示'自身
方法1:
ps -ef | grep java | grep -v grep
方法2: --> "推荐"
ps -ef | grep [j]ava
解读: ps -ef | grep java的时候
1、grep'本身的进程'是grep java,所以grep本身'也会'显示出来
2、而'ps -ef | grep [j]ava'的时候
3、grep'本身的进程'是grep [j]ava,所以grep本身'不会'显示出来
原理:利用了'参数展开'的问题,[j]ava作为grep的参数展开为java,作为'shell参数'则不展开
⑩ grep家族
命令集: pgrep、fgrep、egrep、'zgrep'
zgrep是一个用于搜索'压缩文件'中的字符串或模式的命令 --> gzip------->'.gz'
特点: zgrep则是'在压缩文件中'查找字符串,'不需要解压'就可以操作
tar tf xxxxx.tgz | grep xxxx '文件名关键字'
zcat access0906.tgz | more --> "查看压缩历史日志的内容"
zgrep的机制 grep的||和&&条件 zcat命令汇总
grep的13个案例