Linux文本处理工具之grep

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux文本处理工具之grep相关的知识,希望对你有一定的参考价值。

文本处理三剑客之GREP

文本过滤工具:glob 用于实现bash中的文件名通配

  • 通配符:

    *:任意长度的任意字符
    ?:任意单个字符
    [ ]:明确指明匹配范围内的单个字符

    • [abc]:abc中的任意一个
    • 注:要匹配通配符本身,需要使用%转义
  • 常用的字符集合表示法:
    • [:alpha:]:任意字母
    • [:alnum:]:任意数字和字母
    • [:blank:]:任意空白字符
    • [:cntrl:]:任意控制字符
    • [:digit:]:任意数字
    • [:lower:]:任意小写字母
    • [:upper:]:任意大写字母
    • [:space:]:任意空格

      例如:显示/var目录下,以l开头,以小写字母结尾,且中间至少出现一位数字的文件或目录

    • ls -d /var/l[[:digit:]][[:lower:]]

      grep:全局搜索正则表达式并显示出来(文本过滤工具)

      grep:基本正则表达式
      egrep:扩展正则表达式

作用:文本搜索,根据用户指定的内容,对目标文件进行逐行匹配检查,打印匹配到的行

  • 内容(模式):由正则表达式字符和文本符所编写的过滤条件
  • 正则表达式:由一类特殊字符所编写的模式,有些字符不表示字符本身的含义,而表示控制或通配
  • 元字符:表示特殊含义的字符

    grep的使用方法:

  • 格式:grep [选项] 模式 目录或文件
  • --color=auth:对匹配到的内容加颜色显示
  • -m #:匹配#次后停止
  • -n:显示匹配的行行数
  • -c:统计匹配到的行的行号
  • -v:显示不能匹配到的行
  • -i:匹配时忽略字符大小写
  • -o:仅显示匹配到的字符
  • -q:静默模式
  • -A#:显示匹配到的行和后#行
  • -B#:显示匹配到的行和前#行
  • -C#:显示匹配到的行和前后各#行
  • -w:匹配整个单词
  • -E:使用扩展正则表达式
  • -F:使用fgrep
  • -f file:根据模式文件中的内容去匹配

基本正则表达式的元字符:使用引号引起来

  • 字符匹配:

    .:任意单个字符
    []:匹配指定范围内的任意单个字符
    [^]:匹配指定范围之外的任意单个字符

  • 次数匹配:

    :匹配前面的字符任意次数
    .
    :匹配任意长度的任意字符
    \?:匹配前面的字符0次或1次,即前面的字符可有可无
    \+:匹配前面的字符至少出现一次
    \{m\}:匹配前面的字符m次
    \{m,n\}:匹配前面的字符m到n次
    \{m,\}:匹配前面的字符至少出现m次
    \{,m\}:匹配前面的字符至多出现m次

  • 位置锚定:

    ^:匹配的字符出现在行首
    $:匹配的字符出现在行尾
    ^pattern$:用于整行匹配
    ^$:空行
    ^[[:space:]]$:空白行
    \<或\b:词首锚定,用于单词模式左侧
    \>或\b:词尾锚定,用于单词模式的右侧
    \<pattern\>:匹配整个单词

  • 分组:

    \(\):把括号中的内容分组
    \(xy\)*ab:匹配ab前面的xy出现任意次数

  • 后向引用:引用前面分组括号中的模式所匹配到的内容
    • 分组括号中的模式所匹配到的内容,会被正则表达式引擎记录在内部变量中,这些变量被命名为\1,\2,\3……
      • -n:把左侧起第n个左括号以及与之匹配的右括号之间的模式所匹配到的字符
      • 例:(str1+(str2)*)

        \1:str1+(str2)*
        \2:str2

  • 或者:

    \|:

  • 实例:

    a\|b:a或者b
    C\|cat:C或者cat
    \(C\|c\)at:Cat或者cat

扩展正则表达式:egrep

选项与基本正则表达式相同

egrp的元字符:

  • 字符匹配:同grep
  • 次数匹配:同grep,但是不需要转义
  • 位置锚定:同grep
  • 分组:小括号不需要转义
  • 后向引用
  • 或者:| 不需要转义

fgrep:不支持正则表达式,仅仅找给定的字符串

练习:

  1. 显示/proc/meminfo文件中以大小写s开头的行

    grep -i ‘^s.‘ /proc/meminfo
    grep ‘[Ss].
    ‘ /proc/meminfo

  2. 显示/etc/passwd文件中不以bash结尾的行

    grep -v ‘.*bash$‘ /etc/passwd

  3. 显示CentOS7中的/etc/grub2.cfg文件中,至少以一个空白字符开头,且后面有非空白字符的行

    grep -E "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg

以上是关于Linux文本处理工具之grep的主要内容,如果未能解决你的问题,请参考以下文章

linux文本处理三剑客之grep

Linux文本处理之 grep egrep

Linux文本处理三剑客之grep

Linux文本处理工具之grep

Linux文本处理之grep

文本处理三剑客之grep