美文网首页计算机语言工具文Linux
Linux文本三剑客之----grep的使用

Linux文本三剑客之----grep的使用

作者: 莫讠 | 来源:发表于2021-08-27 10:46 被阅读0次

    awk、grep、sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一。三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂。grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。

    1、grep

    1.1 什么是grep和egrep

    Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来(匹配到的标红)。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

    1.2 使用grep

    1.2.1 命令格式

    grep [option] pattern file

    1.2.2 命令功能

    用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。

    1.2.3 命令参数

    常用参数已加粗

    • -A<显示行数>:除了显示符合范本样式的那一列之外,并显示该行之后的内容。
    • -B<显示行数>:除了显示符合样式的那一行之外,并显示该行之前的内容。
    • -C<显示行数>:除了显示符合样式的那一行之外,并显示该行之前后的内容。
    • -c:统计匹配的行数
    • -e :实现多个选项间的逻辑or 关系
    • -E:扩展的正则表达式
    • -f FILE:从FILE获取PATTERN匹配
    • -F :相当于fgrep
    • -i --ignore-case #忽略字符大小写的差别。
    • -n:显示匹配的行号
    • -o:仅显示匹配到的字符串
    • -q: 静默模式,不输出任何信息
    • -s:不显示错误信息。
    • -v:显示不被pattern 匹配到的行,相当于[^] 反向匹配
    • -w :匹配 整个单词

    1.3 grep实战演示

    对于本次示例的test

    cat test 
    
    aaa
    bbbb
    aaabbbb
    AAAAaaaa
    BBBBAASDADDSAaabb
    
    cat test | grep -A2 b 
    
    bbbb
    aaabbbb
    AAAAaaaa
    BBBBAASDADDSAaabb
    

    查找匹配"AAA"或者"bbb"的字段

    $ cat test | grep -e AAA -e bbb
    
    bbbb
    aaabbbb
    AAAAaaaa
    

    反向匹配,查找非这段匹配的字符

    $ cat test | grep -v BA
    
    aaa
    bbbb
    aaabbbb
    AAAAaaaa
    

    显示匹配到的行数

    $ cat test | grep -c aa
    
    4
    

    2、正则表达式

    2.1 认识正则

    (1)介绍

    正则表达式应用广泛,在绝大多数的编程语言都可以完美应用,在Linux中,也有着极大的用处。

    使用正则表达式,可以有效的筛选出需要的文本,然后结合相应的支持的工具或语言,完成任务需求。

    在本篇博客中,我们使用grep/egrep来完成对正则表达式的调用

    (2)正则表达式类型

    正则表达式可以使用正则表达式引擎实现,正则表达式引擎是解释正则表达式模式并使用这些模式匹配文本的基础软件。

    在Linux中,常用的正则表达式有:

    • POSIX 基本正则表达式(BRE)引擎
    • POSIX 扩展正则表达式(BRE)引擎

    2.2 基本正则表达式

    2.2.1 匹配字符

    (1)格式

    • . 匹配任意单个字符,不能匹配空行
    • [] 匹配指定范围内的任意单个字符
    • [^] 取反
    • [:alnum:] 或 [0-9a-zA-Z]
    • [:alpha:] 或 [a-zA-Z]
    • [:upper:] 或 [A-Z]
    • [:lower:] 或 [a-z]
    • [:blank:] 空白字符(空格和制表符)
    • [:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
    • [:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
    • [:digit:] 十进制数字 或[0-9]
    • [:xdigit:]十六进制数字
    • [:graph:] 可打印的非空白字符
    • [:print:] 可打印字符
    • [:punct:] 标点符号

    (2)演示

    $ cat test
    
    aaa
    bbbb
    aaabbbb
    AAAAaaaa
    BBBBAASDADDSAaabb
    abc
    123
    //[
    

    .匹配任意单个字符,不能匹配空行

    $ grep . test 
    
    aaa
    bbbb
    aaabbbb
    AAAAaaaa
    BBBBAASDADDSAaabb
    abc
    123
    //[
    

    []匹配指定范围内的任意单个字符

    $ grep [a/] test 
    
    aaa
    aaabbbb
    AAAAaaaa
    BBBBAASDADDSAaabb
    abc
    //[
    

    [^]取反

    $ grep [^abc] test
    
    AAAAaaaa
    BBBBAASDADDSAaabb
    123
    //[
    

    2.2.2 配置次数

    (1)格式

    • 匹配前面的字符任意次,包括0次*,贪婪模式:尽可能长的匹配
    • .* 任意长度的任意字符,不包括0次
    • ? 匹配其前面的字符0 或 1次
    • + 匹配其前面的字符至少1次
    • {n} 匹配前面的字符n次
    • {m,n} 匹配前面的字符至少m 次,至多n次
    • {,n} 匹配前面的字符至多n次
    • {n,} 匹配前面的字符至少n次

    (2) 演示

    $ cat test 
    
    aaa
    bbbb
    aaabbbb
    AAAAaaaa
    BBBBAASDADDSAaabb
    abc
    123
    //[
    ggle
    google
    ggole
    google
    gooooooooooooooooooooooogle
    

    匹配前面的字符任意次,包括0次

    grep "g[o]*gle" test 
    
    ggle
    google
    google
    gooooooooooooooooooooooogle
    

    .* 任意长度的任意字符,不包括0次

     grep "g[o].*gle" test 
    
    google
    google
    gooooooooooooooooooooooogle
    

    ? 匹配其前面的字符0 或 1次

    grep "g[o]\?gle" test 
    
    ggle
    

    2.2.3 位置锚定:定位出现的位置

    (1)格式

    • ^ 行首锚定,用于模式的最左侧
    • $ 行尾锚定,用于模式的最右侧
    • ^PATTERN$,用于模式匹配整行
    • ^$ 空行
    • ^[[:space:]].*$ 空白行
    • < 或 \b 词首锚定,用于单词模式的左侧
    • > 或 \b 词尾锚定;用于单词模式的右侧
    • <PATTERN>

    (2)演示

    $ cat test 
    aaa
    bbbb
    aaabbbb
    AAAAaaaa
    BBBBAASDADDSAaabb
    abc
    123
    //[
    ggle
    google
    ggole
    google
    gooooooooooooooooooooooogle
    

    ^行首锚定,匹配最左边的字符

    grep ^a test
    
    aaa
    aaabbbb
    abc
    

    $行尾锚定,匹配最右边的字符

    grep b$ test 
    
    bbbb
    aaabbbb
    BBBBAASDADDSAaabb
    

    匹配以a为首,b为结尾的语段

    $ grep "^a.*b$" test 
    
    aaabbbb
    

    参考资料来源:https://www.cnblogs.com/along21/p/10366886.html

    相关文章

      网友评论

        本文标题:Linux文本三剑客之----grep的使用

        本文链接:https://www.haomeiwen.com/subject/rrcmiltx.html