zoukankan      html  css  js  c++  java
  • grep, egrep, fgrep笔记

    grep, egrep, fgrep    

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

    grep [options] PATTERN [FILE...]
        -i:不区分大小写
        --color
        -v: 显示没有被模式匹配到的行
        -o:只显示被模式匹配到的字符串

        
    *: 任意长度的任意字符
    ?: 任意单个字符
    []:
    [^]:    

    正则表达式:REGular EXPression, REGEXP
    元字符:
    .: 匹配任意单个字符
    []: 匹配指定范围内的任意单个字符
    [^]:匹配指定范围外的任意单个字符
        字符集合:
        [:space:]:空白字符
        [:punct:]:标点符号
        [:lower:]:小写字母
        [:upper:]: 大写字母
        [:alpha:]: 大小写字母
        [:digit:]: 数字               以数字结尾的行:grep --color '[[:digit:]]$' /etc/inittab
                                      以空白字符加行结尾:grep --color '[[:space:]][[:digit:]]$' /etc/inittab
        [:alnum:]: 数字和大小写字母
        
        
    匹配次数(贪婪模式):
    *: 匹配其前面的字符任意次    
        a, b, ab, aab, acb, adb, amnb
        a*b, a?b
        a.*b

        .*: 任意长度的任意字符
    ?: 匹配其前面的字符1次或0次
    {m,n}:匹配其前面的字符至少m次,至多n次
        {1,}
        {0,3}

    位置锚定:
    ^: 锚定行首,此字符后面的任意内容必须出现在行首
    $: 锚定行尾,此字符前面的任意内容必须出现在行尾
    ^$: 空白行

    <或: 锚定词首,其后面的任意字符必须作为单词首部出现
    >或: 锚定词尾,其前面的任意字符必须作为单词的尾部出现

    找root单词:   <root>

    分组:
    ()
        (ab)*   ab是一个整体,可以出现任意次
        主要用于:后向引用
        1: 引用第一个左括号以及与之对应的右括号所包括的所有内容
        2:
        3:
        
    He love his lover.
    She like her liker.
    He like his lover.

    l..e

    练习:
    1、显示/proc/meminfo文件中以不区分大小的s开头的行;
    grep -i '^s' /proc/meminfo
    grep '^[sS]' /proc/meminfo
    2、显示/etc/passwd中以nologin结尾的行;
    grep 'nologin$' /etc/passwd

    取出默认shell为/sbin/nologin的用户列表
    grep "nologin$' /etc/passwd | cut -d: -f1

    取出默认shell为bash,且其用户ID号最小的用户的用户名
    grep 'bash$' /etc/passwd | sort -n -t: -k3 | head -1 | cut -d: -f1

    3、显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行;
    grep "^#[[:space:]]{1,}[^[:space:]]" /etc/inittab

    4、显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行;
    grep ':[0-9]:' /etc/inittab

    5、显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行;
    grep '^[[:space:]]{1,}' /boot/grub/grub.conf

    6、显示/etc/inittab文件中以一个数字开头并以一个与开头数字相同的数字结尾的行;
    grep '^([0-9]).*1$' /etc/inittab

    练习:
    1、找出某文件中的,1位数,或2位数;
    grep '[0-9]{1,2}' /proc/cpuinfo
    grep --color '<[0-9]{1,2}>' /proc/cpuinfo

    2、找出ifconfig命令结果中的1-255之间的整数;

     
    3、查找当前系统上名字为student(必须出现在行首)的用户的帐号的相关信息, 文件为/etc/passwd
    grep '^student>' /etc/passwd | cut -d: -f3
    id -u student

    student1
    student2

    练习:分析/etc/inittab文件中如下文本中前两行的特征(每一行中出现在数字必须相同),请写出可以精确找到类似两行的模式:
    l1:1:wait:/etc/rc.d/rc 1
    l3:3:wait:/etc/rc.d/rc 3

    grep '^l([0-9]):1.*1$' /etc/inittab

    REGEXP:REGular EXPression
    Pattern:

    正则表达式:
        Basic REGEXP:基本
        Extended REGEXP:扩展

    基本正则表达式:
    .:
    []:
    [^]:

    次数匹配:
    *:
    ?: 0或1次
    {m,n}:至少m次,至多n次;

    .*:

    锚定:
    ^:
    $:
    <, :
    >, :

    ()
    1, 2, 3, ...

    grep:使用基本正则表达式定义的模式来过滤文本的命令;
        -i
        -v
        -o
        --color
        -E: 使用扩展正则表达式
        -A #: 显示匹配行的后两行  after
        -B #: 显示匹配行的前两行  befor
        -C #: 上下各两行,content 上下文
        
    扩展正则表达式:

    字符匹配:
    .
    []
    [^]

    次数匹配:
    *:
    ?: 不需要反斜线
    +: 匹配其前面的字符至少1次,相当于{1,}
    {m,n}

    位置锚定:
    ^
    $
    <
    >

    分组:
    ():分组,真正实现了分组
    1, 2, 3, ...

    或者
    |: or
    C|cat:  是C或cat ,不是Cat或cat,要实现Cat或cat,使用分组grep -E '(C|c)at' filename

    grep -E = egrep



    4、显示所有以数字结尾且文件名中不包含空白的文件;
    ls *[^[:space:]]*[0-9]   ?????????


    找出/boot/grub/grub.conf文件中1-255之间的数字;
    <([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])>

    .

    ifconfig | egrep '<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])>.<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])>.<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])>.<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])>'

    ifconfig | egrep --color '(<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])>.){3}<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])>'

    IPv4:
    5类:A B C D E
    A:1-127
    B:128-191
    C:192-223
    找IP地址:
    <([1-9]|[1-9][0-9]|1[0-9]{2}|2[01][0-9]|22[0-3])>(.<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])>){2}.<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])>


    http://mageedu.blog.51cto.com/


    grep, egrep
    fgrep: 不支持正则表达式

  • 相关阅读:
    Linux内核编译測试
    Matlab pchiptx
    汇编 -- Hook API (MessageBoxW)
    三种SVM的对偶问题
    JAVA性能优化的五种方式
    C++字符串操作笔试题第二波
    JavaScript实现拖拽预览,AJAX小文件上传
    vijos-1382 寻找主人
    百度2015商务搜索实习面试总结
    [Swift]LeetCode790. 多米诺和托米诺平铺 | Domino and Tromino Tiling
  • 原文地址:https://www.cnblogs.com/jjzd/p/5727545.html
Copyright © 2011-2022 走看看