grep、正则表达式

grep、正则表达式

  • grep:文本过滤(模式:pattern)工具
    作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行。
    模式:由正则表达式字符及文本字符所编写的过滤条件。
  • 正则表达式:由一类特殊字符及文本所编写的模式,其中有些字符不表示字符字面意义,而表示控制或通配的功能。
    正则表达式分为两类:基本正则表达式、扩展正则表达式
  • grep工具支持基本正则表达式,egrep支持扩展正则表达式,fgrep快速搜索,不支持正则。

grep

  • grep [OPTIONS] PATTERN [FILE…]
    grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]
    –color==auto 高亮显示匹配到的字符串
    -o 仅显示匹配到的字符串
    -v 取反、显示不能被pattern匹配到的行
    -i 忽略字符的大小写
    -n 显示行号
    -c 显示统计到的行数,等同于wc -l
    -q 静默输出 只关心命令的执行结果 不关心输出结果
    -e 指定多个条件,条件是或的关系
    -w 匹配整个单词
    -A 后几行
    -B 前几行
    -C 前后几行 查看日志 搜索关键字排查错误的时候
    -E === egrep 支持扩展的正则表达式
    -F === fgrep 不支持正则表达式

基本正则表达式

  • 字符匹配
    . :匹配任意单个字符
    [] :匹配指定范围内的任意单个字符
    [^] :匹配指定范围外的任意单个字符
    以上[]中的范围有以下几种表示方法:

    • [:alnum:] 所有的数字和字符
      [:alpha:] 所有的字母(不区分大小写)
      [:lower:] 小写字母
      [:upper:] 大写字母
      [:space:] 专门匹配空格
      [:cntrl:] 不可打印的控制字符(退格、删除、警铃…)
      [:digit:] 十进制数字 ;[:xdigit:]十六进制数字
      [:graph:] 可打印的非空白字符
      [:print:] 可打印字符
      [:punct:] 标点符号
  • 次数匹配
    用于在要指定次数的字符后面,用于前面的字符要出现的次数:

    *:匹配前面的字符任意次,0 到无穷次
    注:默认情况下,正则表达式是工作在贪婪模式下,能匹配多少就匹配多少
    .* 任意字符出现任意次 
    a* a字符出现任意次 
    \? 匹配前面的字符出现0次或者1次 
    \+ 匹配前面的字符至少1次 
    \{n\} 前面的字符出现n次 
    \{m,n\}匹配前面的字符出现m到n次,m,n是一个范围 
    \{,n\}匹配前面的字符最多出现n 
    \{m,\}匹配前的字符至少出现m次
    \ 转义符

  • 位置锚定 
    ^ 锚定行首,用于模式的最左侧
    $ 锚定行尾,用于模式的最右侧

    ^$ 匹配空行的
    ^[[:space:]] 行首是空白的字符
    ^[[:space:]]*$ 也是 空行
    ^a 以a开头的行
    b$ 以b结束的行
    ^a.*b$ 以a开头 中间任意字符 以b结尾的行
    ^a.*[[:space:]]\{3\}.*b$ a开头跟任意字符,中间出现三次空格再跟任意字符 以b结尾的行
    ^# 以#开头的行

    \b \b 匹配词首和词尾 ;\bPATTERN\b
    \< > 匹配词首和词尾 ;\<PATTERN\>

  • 分组 \(\)
    将一个或多个字符捆绑在一起,当做一个整体进行处理,符号:()
    (xy)*ab 表示xy这个整体可以出现任意次`
    注:1、分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式:\1,\2,\3, …
    2、后向引用:引用前面的分组括号中的模式所匹配的字符,而非模式本身

  • 或者 \|
    a \| b
    C \| cat

扩展正则表达式

  • grep -E ‘PATTERN’ FILE…
    egrep ‘PATTERN’ FILE…

  • 字符匹配
    . :匹配任意单个字符
    [] :匹配指定范围内的任意单个字符
    [^] :匹配指定范围外的任意单个字符
    以上[]中的范围有以下几种表示方法:

    • [:alnum:] 所有的数字和字符
      [:alpha:] 所有的字母(不区分大小写)
      [:lower:] 小写字母
      [:upper:] 大写字母
      [:space:] 专门匹配空格
      [:cntrl:] 不可打印的控制字符(退格、删除、警铃…)
      [:digit:] 十进制数字 ;[:xdigit:]十六进制数字
      [:graph:] 可打印的非空白字符
      [:print:] 可打印字符
      [:punct:] 标点符号
  • 次数匹配
    用于在要指定次数的字符后面,用于前面的字符要出现的次数:

    *:匹配前面的字符任意次,0 到无穷次
    注:默认情况下,正则表达式是工作在贪婪模式下,能匹配多少就匹配多少
    .* 任意字符出现任意次 
    ? 匹配前面的字符出现0次或者1次 
    + 匹配前面的字符至少1次 
    {n} 前面的字符出现n次 
    {m,n}匹配前面的字符出现m到n次,m,n是一个范围 
    {,n}匹配前面的字符最多出现n 
    {m,}匹配前的字符至少出现m次

  • 位置锚定 
    ^ 锚定行首,用于模式的最左侧
    $ 锚定行尾,用于模式的最右侧

    ^$ 匹配空行的
    ^[[:space:]] 行首是空白的字符
    ^[[:space:]]*$ 也是 空行
    ^a 以a开头的行
    b$ 以b结束的行
    ^a.*b$ 以a开头 中间任意字符 以b结尾的行
    ^a.*[[:space:]]\{3\}.*b$ a开头跟任意字符,中间出现三次空格再跟任意字符 以b结尾的行
    ^# 以#开头的行

    \b \b 匹配词首和词尾 ;\bPATTERN\b
    \< > 匹配词首和词尾 ;\<PATTERN\>

  • 分组 ()
    将一个或多个字符捆绑在一起,当做一个整体进行处理,符号:()
    (xy)*ab 表示xy这个整体可以出现任意次

  • 或者 |
    a | b
    C | cat

原创文章,作者:s,如若转载,请注明出处:http://www.178linux.com/72661

(0)
ss
上一篇 2017-04-06 19:20
下一篇 2017-04-06 20:12

相关推荐

  • 关于 建立私有CA和申请证书

                               建立私有CA和申请证书            …

    系统运维 2016-09-23
  • 如何安装VMware Workstation

    1、打开安装包,直接点击“下一步” 2、选择接受条款,单击“下一步” 3、选择安装路径,单击“下一步” 4、单击“下一步”,也可以勾选掉两个选项   5、单击“下一步”   6、点击“安装”   7、完成安装  

    2017-07-11
  • 为什么中国的网页设计那么烂?

    Nick Johnson,一个有12年经验的Web设计师在它的blog里写下了“Why is Chinese Web Design So Bad”,新浪,人人,百度,阿里巴巴,腾讯榜上有名。其中的观点相当的好,希望所有的中国人都读一下。我不全文翻译了,只是给大家看一些摘要。(保证不会像《环球时报》一样) —————————— 作者2005年的夏天来到中国,他…

    Linux干货 2016-07-11
  • Centos 7 快速进入图形界面

    Centos 7 快速进入图形界面.pdf

    系统运维 2016-04-05
  • 揭开链接文件的面纱——从根本上剖析硬链接与软链接异同

    在linux的学习过程中,链接文件的学习让不少人头疼,很多同学往往分不清什么是硬链接,什么是软链接,对于两者的概念和区别常常容易混淆、搞不清楚。今天我们就从原理、从根本上为大家辨析一些两者之间的区别,相信大家在看完这篇文章之后对链接文件会有一个清晰正确的认识。 1、在实现原理上不同 硬链接,涉及到文件的底层模式,因此被称为硬链接文件。硬链接文件只是一个指针指…

    Linux干货 2016-10-20
  • yum与rpm包

    yum与rpm包 包命名和工具 包:分类和拆包 Application-VERSION-ARCH.rpm:主包 Application-devel-VERSION-ARCH.rpm 开发子包 Application-utils-VERSION-ARHC.rpm 其它子包 Application-libs-VERSION-ARHC.rpm 其它子包 包之间:可…

    Linux干货 2017-05-08