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: 不支持正则表达式

  • 相关阅读:
    Creating a generic Web Parts for hosting ASP.NET User Controls
    Speed Up SQL Server Apps 提高SQL Server应用程序的运行效率 (Part 1)
    How to use CreateChildContorls method inherited from System.Web.UI.Control
    How to quickly access Web Part Management Page
    SQL Script tips for MS SQL Server
    How to enable single signon service on the SPS
    A brief summary of UML & Rational Rose – Use Case Diagram, Part II
    Borland Together for Visual Studio.Net V2.0 安装问题
    Speed Up SQL Server Apps 提高SQL Server应用程序的运行效率 (Part 2)
    体验ReSharper V1.0 for VS.Net 2003 Part I
  • 原文地址:https://www.cnblogs.com/jjzd/p/5727545.html
Copyright © 2011-2022 走看看