linux grep文本搜索工具

1.概述

grep man手册中解释 "print lines mattching a pattern"翻译成中文为 按照匹配的模式打印匹配的行。
要注意两点:

  • 1.grep是按行打印的
  • 2.是按照模式匹配的

grep [opyion] pattern [file …]

2.[option] 选项

grep的参数选项有很多,接收几个常用的选项

  1. -n 显示匹配的行号
  2. -v 反选
  3. -i 忽略大小写
  4. -o 只打印匹配的字符串
  5. -E 使用扩展的正则表达式 与egrep 命令一样
  6. -A 显示匹配行和之后的#行也显示 after grep -A ‘^core id’ /proc/cpuinfo
  7. -B 前面的#h行 before
  8. -C 前后各#行 context
  9. –color 显示匹配的颜色

3.正则表达式元字符

  • 字符匹配
    . 任意单个字符
    [] 指定范围内的单个字符
    [^] 指定范围内除外的单个字符
  • 次数匹配
    * 匹配前面字符任意次
    ? 前面的字符可有可无
    {m,n} 前面字符至少m次,至多n次
  • 位置锚定
    ^ 行首
    $ 行尾
    < /b 单词词首
    > /b 单词词尾
  • 分组
    ()
    /1/2/3
字符集合

具体 man 7 regex
[[:digit:]] 字符集合
[[:lower:]] 所有小写字符集合
[[:upper:]] 所有大写字符集合
[[:punct:]] 标点符号集合
[[:space:]] tab,space 等空白字符集合
[[:alpha:]] 等同[A-Za-z]
[[:alnum:]] 等同[A-Za-z0-9]
外层 [ ]表示匹配指定范围内的单个字符,内层[:lower:] 所有的小写字符

4.基础正则表达式和扩展正则表达式

匹配字符:这部分和基本正则表达式一样

匹配次数:
* 和基本正则表达式一样
? 基本正则表达式是?,二这里没有\。
{m,n} 相比基本正则表达式也是没有了\。
+ 匹配其前面的字符至少一次,相当于{1,}。

位置锚定:和基本正则表达式一样。

分组及引用:
(string) 相比基本正则表达式也是没有了\。
\1 引用部分和基本正则表达式一样。
\n 引用部分和基本正则表达式一样。

或者
a|b :匹配a或b,注意a是指 | 的左边的整体,b也同理。比如 C|cat 表示的是 C或cat,而不是Cat或cat,如果要表示Cat或cat,则应该写为 (C|c)at 。记住(string)除了用于引用还用于分组。
注1:默认情况下,正则表达式的匹配工作在贪婪模式下,也就是说它会尽可能长地去匹配,比如某一行有字符串 abacb,如果搜索内容为 "a.b" 那么会直接匹配 abacb这个串,而不会只匹配ab或acb。
注2:所有的正则字符,如 [ 、
、( 等,若要搜索 * ,而不是想把 * 解释为重复先前字符任意次,可以使用 * 来转义。

grep fgrep egrep

grep 支持基础正则表达式 egrep 支持扩展正则表达式
grep egrep 由于grep搜索要消耗大量的资源,耗费cpu
fgrep 快速查找字符串 不包含元字符 ,直接搜索字符串 用fgrep

5.技巧 [\S\s]

\s 指空白、换行、tab缩进等所有的空白
\S\s 相反
[\S\s] 表示所有的字符
[\S\s] [\W\w] 匹配包括出现换行的字符
. 不匹配出现换行的字符
所以一般用[\s\S]表示匹配所有的字符

区别文件名通配符

* 任意长度的任意字符
? 任意单个字符
[] 指定范文内的单个字符
[^] 指定范围除外的单个字符

6.总结

grep 的用法需要多练,用熟之后元字符就记住了;
用grep来匹配日志信息会很有用,可以用此有熟悉grep命令;
如果平时制作字符串的匹配,用fgrep耗内存较少。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值