工作中经常需要碰到Linux的日志或者命令输出,处理输出的文档流信息,作为我个人认为的三剑客之首,grep平时用的最多,但基本也就是全量匹配,或者加个i不区分大小写进行匹配。
趁最近工作有空闲,首相对grep进行一些学习。
参考链接:
https://blog.csdn.net/jinguangliu/article/details/81129426
https://www.cnblogs.com/sidianok/p/12931683.html
简介:
grep(global search regular expression(RE) and print out the line)
全面搜索正则表达式并将其打印输出
通过grep--help输出可以看到非常多的选项,我还是参考网上的资料,先走一遍流水。
[root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename 选项与参数: -a :将 binary 文件以 text 文件的方式搜寻数据 -c :计算找到 '搜寻字符串' 的次数 -i :忽略大小写的不同,所以大小写视为相同 -n :顺便输出行号 -v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行! --color=auto :可以将找到的关键词部分加上颜色的显示喔!
平时用的比较多的是-i 个人感觉比较有用的有-v -n
找到一个比较使用的参数 -A3 -B2
-A, --after-context=NUM 打印以文本结尾的NUM 行
-B, --before-context=NUM 打印以文本起始的NUM 行
-C, --context=NUM 打印输出文本NUM 行[前后都打印]
通过这两个参数可以打印出,匹配行信息的后几行或者前几行信息.
grep 可以直接与正则表达式配合使用,使用规则与Python语言中的正则使用差不多。规则需要用单引号包起来,特殊符号匹配需要用转移符号\进行转义
需要转移的包含但不仅限与:{,},-,\,
具体规则不在重复,提示自己需要在规则中前后添加单引号,
对于|[或]和+[1个或者]与?等扩展正则使用字符,
可以用过grep -E使用,或者在grep是用的时候,在这个符号之前+上转移字符
通过本人测试,其实通过grep -E官方的解释为:-E, --extended-regexp PATTERN 是一个可扩展的正则表达式(缩写为 ERE)
其实通过-E的选项使用正则规则更加合适,你可以在任何情况下都加上,这样grep能认识所有的正则里面的符号,使用的时候不需要在正则符号比较{-等符号之前加上\的转义符
如果需要将正则中的特殊符号当做普通字符匹配,就可以通过转移符\
(base) [sidian@VM_0_17_centos ~]$ echo '{}' |grep '{}' {} (base) [sidian@VM_0_17_centos ~]$ echo '{}' |grep -E '\{\}' {}
上面演示了匹配{}的写法
最后我对-E的使用,我认为如果用到了正则符号就上-E参数,如果没用到就不用E了