美文网首页Linux小推车
Linux Day16: grep/egrep/fgrep文本查

Linux Day16: grep/egrep/fgrep文本查

作者: 泥人吴 | 来源:发表于2018-10-20 21:52 被阅读3次

    文本查找的需要:

    grep,egrep,fgrep
    grep:根据模式搜索文本,并将符合模式的文本行显示出来
    Pattern:文本字符和正则表达式的元字符所组合而成匹配条件

    grep:

    # 表达式
    SYNOPSIS
           grep [OPTIONS] PATTERN [FILE...]
           grep [OPTIONS] [-e PATTERN]...  [-f FILE]...  [FILE...]
    
    • grep的一些用法:
    $ grep 'root' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    $ man grep
    $ # -i:不区分大小写
    $ # --color 显示颜色
    $ grep --color  'root' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    $ #-v:反向匹配,显示没有被模式匹配的行
    $ grep -v  'root' /etc/passwd
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    ...
    $ # -o:只显示被模式匹配的本身
    $ grep -o 'root' /etc/passwd
    root
    root
    root
    

    正则表达式:

    Regular EXPression,REGEXP (下次课程学习)
    复习Linux Day6

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

    元字符:

    . :匹配任意单个字符
    [ ]: 匹配指定范围内的单个字符
    [ ^ ]:匹配指定范围外的单个字符
    字符集合:[ :digit:] 数字, [ :lower:] 小写,[ :upper :]大写,[ :punct:]标点符号,[:space:]空格,[:alpha:]所有字母,[:alnum:]所有字符字母
    
    \<或\b放在后面 :锚定词首, 其后面的任意字符必须作为单词首部出现
    \>或\b (放在前面): 锚定词尾,其前面的任意字符必须作为单词的尾部出现
    

    分组:\ ( \ )

    \ (ab)* 后向引用(ab)的意思

    $ # .匹配单个任意字符
    $ grep  'r..t' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    
    $ # 字符个数:* 匹配其前面的字符任意次(区别任意长度)
    
    $ # 创建一个文件text.txt
    $ nano text.txt
    $ cat text.txt
    a
    b
    ab
    adb
    amnb
    amnmnb
    amnmbmnb
    
    $ # a.*b:任意长度的任意字符(以a开头,以b结束,中间什么都可以)
    $ grep 'a.*b' text.txt
    ab
    adb
    amnb
    amnmnb
    amnmbmnb
    
    $ # a*b的意义:
    $ grep 'a*b' text.txt
    b
    ab
    adb
    amnb
    amnmnb
    amnmbmnb
    $ #匹配出了amnmbmnb:正则表达式的贪婪模式:尽可能的匹配
    
    $ # ?:做次数匹配,匹配其前面的字符1次/0次
    $ grep 'a?b' text.txt
    $ grep 'a\?b' text.txt
    b
    ab
    adb
    amnb
    amnmnb
    amnmbmnb
    $ # ?需要.'\'做转义,grep做部分匹配
    
    $ # {m,n\}在bashell中就是展开的意思,其前面加上\{}表示不展开的意思
    $ # \{m,n\}:匹配其前面的字符至少m次,至多n次
    $ grep 'a\{1,3\}b' text.txt
    ab
    $ grep 'a.\{1,3\}b' text.txt
    adb
    amnb
    amnmbmnb
    $ #grep 'a.\{1,3\}b' text.txt表示a,b之间至少包含1个字符最多出现三个字符,所以注意理解amn
    mbmnb,以及区别grep 'a\{1,3\}b' text.txt
    

    位置锚定:

    ^: 锚定行首,此字符后面的字符必须出现在行首
    $ :锚定行尾。
    `^$` : 表示空白行
    
    $ grep 'b..h$' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    ubuntu:x:500:500:ubuntu,,,:/home/ubuntu:/bin/bash
    ...
    # 查看空白行
    $ grep '^$' /etc/passwd | wc -l
    0
    

    友情阅读推荐:

    生信技能树公益视频合辑:学习顺序是linux,r,软件安装,geo,小技巧,ngs组学!
    请猛戳下面链接
    B站链接:https://m.bilibili.com/space/338686099

    YouTube链接:https://m.youtube.com/channel/UC67sImqK7V8tSWHMG8azIVA/playlists

    生信工程师入门最佳指南:https://mp.weixin.qq.com/s/vaX4ttaLIa19MefD86WfUA

    学徒培养:https://mp.weixin.qq.com/s/3jw3_PgZXYd7FomxEMxFmw

    相关文章

      网友评论

        本文标题:Linux Day16: grep/egrep/fgrep文本查

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