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
下一篇 2017-04-06

相关推荐

  • ansible原理及简单应用

    一、基础介绍 1、简介 ansible是新出现的自动化运维工具,基于python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供…

    Linux干货 2016-01-13
  • linux入门及基本命令

    Linux的入门及基本命令     一.   磁盘分区 1.       分区类型 主分区:1-4,一个硬盘最多四个,最少可以没有,前提有别的硬盘存在,启动系统或存数据,不要再分小区,只有个活动状态。 2.    &nb…

    Linux干货 2017-07-15
  • AWK实现求和、平均数、最小值、最大值

    1.简单的按列求和]$ cat test123125126]$ awk ‘{sum += $1}END {print sum}’ test2.对符合某些条件的行,按列求和]$ cat  testaaa 123bbb 125aaa 123aaa 123ccc 126对文件test中 第一列为aaa的行求和]$ awk &#82…

    Linux干货 2017-04-09
  • 项目实践==虚拟主机及SSL通信(Blog 14)

    httpd-2.4及httpd-2.4实现

    2017-12-02
  • Linux命令中特殊符号的用法

    Linux命令中特殊符号的用法 在马哥教育学习了将近一周的Linux运维,由最初对Linux系统的一无所知,到了解了Linux的发展历程,学习了一些基本命令,惊叹于Linux的强大功能。下面根据我学到的,介绍一下关于Linux命令中特殊符号的用法。 $的用法 1.$()或’’引用命令执行的结果 例如:如果我们想要创建一个以当前日期命名的目录,可以执行 #mk…

    2017-07-15
  • vim文本编辑器练习

    1、复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符? :%s@^[[:space:]]\+@@gc   2、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首添加一个#号? :%s@^[…

    Linux干货 2016-08-12