Linux学习之十grep及正则表达式(grep)

一、文本查找的需要:
grep,egrep,fgrep
    1、grep:根据模式搜索文本,并将符合模式的文本行显示出来
        Pattern(模式):文本字符和正则表达式的元字符组合而成匹配条件
        grep [options] PATTERN [FILE...]
            例:[root@Ourlab ~]# grep 'root' /etc/passwd
                root:x:0:0:root:/root:/bin/bash
                operator:x:11:0:operator:/root:/sbin/nologin
            -i:忽略大小写
            --colour:匹配的字符或字符串加颜色
            例:[root@Ourlab ~]# grep --colour 'root' /etc/passwd
                root:x:0:0:root:/root:/bin/bash
                operator:x:11:0:operator:/root:/sbin/nologin
        -v:显示没有被匹配的行
        -o:只显示被匹配的字符串,且以行显示
            例:[root@Ourlab ~]# grep -o 'root' /etc/passwd
                root
                root
                root
                root
    2、通配符:
        *:任意长度的任意字符
        ?:任意单个字符
        []:任意范围内的字符
        [^]:任意范围外字符
    
    3、正则表达式:Regular EXPression(REGEXP)
        元字符:
            .:匹配任意单个字符
                例:[root@Ourlab ~]# grep 'r..t' /etc/passwd
                    root:x:0:0:root:/root:/bin/bash
                    operator:x:11:0:operator:/root:/sbin/nologin
                    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
            []:匹配指定范围内的任意单个字符
            [^]:匹配指定范围外的任意单个字符
               字符集合:[:digit:]数字,[:lower:]小写字母,[:upper:]大写字母,[:punct:]标点符号,[:space:]空格,[:alpha:]所有字母,[:alnum:]所有字母和数字
                例:显示/etc/inittab中以数字结尾的行
                    [root@Ourlab ~]# grep '[[:digit:]]$' /etc/inittab
                    #   5 - X11
                    l0:0:wait:/etc/rc.d/rc 0
                    l1:1:wait:/etc/rc.d/rc 1


            字符次数:
            *:匹配其前面的字符任意次
                例:创建一个文件test.txt,内容为:a,b,ab,aab,acb,adb,amnb,amnbmnb,使用“a*b”进行匹配显示的字符如下:
                    [root@Ourlab ~]# grep 'a*b' test.txt
                    b
                    ab
                    aab
                    acb
                    adb
                    amnb
                    amnbmnb

            .*:匹配任意长度的任意字符
                例:[root@Ourlab ~]# grep 'a.*b' test.txt
                    ab
                    aab
                    acb
                    adb
                    amnb
                    amnbmnb
            \?:匹配其前面的字符1次或0次(使用时需要加转义符\)
                例:[root@Ourlab ~]# grep 'a\?b' test.txt
                    b
                    ab
                    aab
                    acb
                    adb
                    amnb
                    amnbmnb
            \{m,n\}:匹配其前面的字符至少m次,至多n次
                例:[root@Ourlab ~]# grep 'a\{1,3\}b' test.txt
                    ab
                    aab
            位置锚定:
            ^:锚钉行首,此字符后面的任意内容必须出现在行首
                例:[root@Ourlab ~]# grep '^r..t' /etc/passwd
                    root:x:0:0:root:/root:/bin/bash
            $:锚钉行尾,此字符前面的任意内容必须出现在行尾
                例:[root@Ourlab ~]# grep 'w$' /etc/inittab
                    ca::ctrlaltdel:/sbin/shutdown -t3 -r now
            ^$:空白行
                例:[root@Ourlab ~]# grep '^$' /etc/inittab
            \<或\b:锚钉词首,其后面的任意字符必须作为单词的首部出现
            \>或\b:锚钉词尾,其前面的任意字符必须做为单词的尾部出现
            \<\>或\b\b:其指定的字符必须作为单词出现
                例:创建一个文件test2.txt,内容:This is    root.The user is mroot.rooter is a dog's name.chroot is a command.mrooter    is not a word.
                    例1:[root@Ourlab ~]# grep "root\>" test2.txt
                        This is root.
                        The user is mroot.
                        chroot is a command.
            分组:
            \(\):用于后向引用
                例:\(ab\)*:ab作为一组同时出现或不出现
                    [root@Ourlab ~]# grep --colour "\(ab\)" test.txt
                    ab
                    aab
                \1:引用第一个左括号以及与之对应的右括号所包含的所有内容
                \2:引用第二个左括号以及与之对应的右括号所包含的所有内容
                    例:创建一个文件test3.txt文件内容如下:
                    He love his lover.
                    She like her lover.
                    He like his liker.
                    She love her liker.
                    She like him.
                    例1:使用后引用方法查找test3.txt文件相关出现”l..e“单词并以该单词结尾的行;
                    [root@Ourlab ~]# grep '\(l..e\).*\1' test3.txt
                    He love his lover.
                    He like his liker.
课后练习:
1、分析/etc/inittab文件中如下文本中前两行的特征(每一行中出现在数字必须相同),请写出可以精确找到类似两行的模式:
l1:1:wait:/etc/rc.d/rc 1
l3:3:wait:/etc/rc.d/rc 3

[root@Ourlab ~]# grep '^l\([0-9]\):\1.*\1$' /etc/inittab
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值