文本处理工具及grep

在日常的linux运维工作当中,我们经常要在一些文本当中抽取过滤出我们所需要的信息,从而达到我们的需求,需要特定的文本处理工具来帮我们完成此类操作

本章节主要讲解的内容有:

文件查看:cat

分页查看文本:less、more

抽取文件特定行数:head、tail

抽取文本特定列:cut

合并文本:paste

文本统计:wc

文本排序并统计:sort、uniq

比较文件:diff、patch

cat:文本查看

usage:cat [OPTIONS…] FILE…

    -E:在每行结尾添加$符

    -A:显示所有控制符

    -n:每行显示行号

    -b:非空白行编号

    -s:将重复的空白行压缩为一行

[root@CentOS6 ~]# cat -A test.txt    #显示所有控制字符
one$
two$
$
three$
$
[root@CentOS6 ~]# cat -E test.txt    #在每行结尾添加$符
one$
two$
$
three$
$
[root@CentOS6 ~]# cat -b test.txt    #非空行编号
     1one
     2two
     3three
[root@CentOS6 ~]# cat -n test.txt      #显示行号
     1one
     2two
     3
     4three
     5
[root@CentOS6 ~]# cat -s test.txt     #压缩空白行
one
two
three
[root@CentOS6 ~]#

more、less:分页查看内容

usage:more [OPTIONS…] FILE…

    -d:显示翻页及退出提示

usage:less [OPTIONS…] FILE…

    默认man命令就是调用less来完成分页查看

head、tail:抽取文本前后行数

usage:head [OPTION…] FILE…

    -n #:抽取文本前#行

    -c #:抽取文本前#个字节7

    -#:指定行数

usage:tail [OPTIONS…] FILE…

    -n #:抽取文本后#行

    -#:指定行数

    -c #:抽取文本后#个字节

    -f:追踪文本新添加的内容,不退出文本

[root@CentOS6 ~]# head -3 /etc/passwd    #抽取文本的前三行
[root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@CentOS6 ~]# tail -3 /etc/passwd    #抽取文本的后三行
nologin:x:510:514::/home/nologin:/sbin/nologin
mage:x:511:515::/home/mage:/bin/bash
wang:x:512:516::/home/wang:/bin/bash
[root@CentOS6 ~]# head -c 100 /etc/passwd    #抽取文本前100个字节
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nol[root@CentOS6 ~]# 
[root@CentOS6 ~]# tail -c 100 /etc/passwd    #抽取文本后100个字节
ome/nologin:/sbin/nologin
mage:x:511:515::/home/mage:/bin/bash
wang:x:512:516::/home/wang:/bin/bash
[root@CentOS6 ~]#

 

cut:抽取文本

usage:cut [OPTIONS…] FILE…

    -d DELIMITER:指明分隔符,默认tab

    -f FILEDS:

        #:第#个字段

        #,#:离散表示法,例如1,3,5

        #-#:连续表示法,例如1-3

        #,#-#,#:混合表示法例如,1,3-5,7

    -c:按字符切割

    –output-delimiter:指定输出分隔符

[root@CentOS6 ~]# cat test.txt 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@CentOS6 ~]# cut -d: -f1,3 test.txt     #以:为分隔符,抽取文本的第1,3列
root:0
bin:1
daemon:2
[root@CentOS6 ~]#

paste:合并文本

usage:paste [OPTIONS] FILE…

    -d DELIMITER:指定输出分隔符

    -s:所有行显示为一行

[root@CentOS6 ~]# paste issue test.txt     #将两个文本内容合并
CentOS release 6.8 (Final)root:x:0:0:root:/root:/bin/bash
Kernel \r on an \mbin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@CentOS6 ~]# paste -s issue test.txt     #一个文本内容显示为一行
CentOS release 6.8 (Final)Kernel \r on an \m
root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@CentOS6 ~]#

wc:文本统计

usage:wc [OPTIONS…] FILLE…

    -c:统计字节数

    -l:统计行数

    -w:统计单词书

    -m:统计字节数

[root@CentOS6 ~]# wc -l /etc/passwd    #统计行数
47 /etc/passwd
[root@CentOS6 ~]# wc -w /etc/passwd    #统计单词数
67 /etc/passwd
[root@CentOS6 ~]# wc -m /etc/passwd    #统计字节数
2143 /etc/passwd
[root@CentOS6 ~]# wc -c /etc/passwd    #统计字节数
2143 /etc/passwd
[root@CentOS6 ~]#

sort:文本排序

usage:sort [OPTIONS…] FILE…

    -u:重复的行只出现一次

    -r:逆序排序

    -n:按数字从小到大排序

    -f:忽略大小写

    -t DELIMITER:指明分隔符

    -k #:按照指定的分隔符来指定列

[root@CentOS6 ~]# cat test.txt 
1
1
2
1
3
[root@CentOS6 ~]# sort -u test.txt     #重复的行只显示一次
1
2
3
[root@CentOS6 ~]# sort -n test.txt     #数字从小到大排序
1
1
1
2
3
[root@CentOS6 ~]# sort -r test.txt     #逆序排序
3
2
1
1
1
[root@CentOS6 ~]# sort -t' ' -k1 -n test.txt     #对指定的列排序
1
1
1
2
3
[root@CentOS6 ~]#

uniq:统计重复的行

usage:uniq [OPTION…] FILE…

    -c:显示重复行的重复次数

    -d:仅显示重复过的行

    -u:显示不曾重复的行

    一般和sort命令搭配使用

[root@CentOS6 ~]# cat test.txt 
1
1
2
1
3
[root@CentOS6 ~]# uniq -c test.txt     #显示重复行的重复次数
      2 1
      1 2
      1 1
      1 3
[root@CentOS6 ~]# uniq -d test.txt     #仅显示重复的行
1
[root@CentOS6 ~]# uniq -u test.txt     #显示不曾重复的行
2
1
3
[root@CentOS6 ~]#

diff:比较两个文件的区别

以逐行的方式比较两个文件的不同之处

diff /PATH/TO/OLDFILE /PATH/TO/NEWFILE > /PATH/TO/PATHCH_FILE

-u:使用unfied机制,即显示要修改的行的上下文,默认为三行

2016-08-07_205320.png

2016-08-07_205957.png

patch:向文件打补丁

    path [OPTIONS] -i /PATH/TO/PATCH_FILE /PATH/TO/OLDFILE

    patch /PATH/TO/OLDFILE < /PATH/TO/PATCH_FILE

2016-08-07_210222.png

使用以上命令来完成几道练习题:

1.找出ifconfig命令中的IP地址
[root@CentOS6 ~]# ifconfig #命令执行结果
eth0      Link encap:Ethernet  HWaddr 00:0C:29:52:81:65  
          inet addr:10.1.252.233  Bcast:10.1.255.255  Mask:255.255.0.0
          inet6 addr: fe80::20c:29ff:fe52:8165/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:582651 errors:0 dropped:0 overruns:0 frame:0
          TX packets:27749 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:60558505 (57.7 MiB)  TX bytes:4391524 (4.1 MiB)
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:192 errors:0 dropped:0 overruns:0 frame:0
          TX packets:192 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:23756 (23.1 KiB)  TX bytes:23756 (23.1 KiB)
[root@CentOS6 ~]# ifconfig | head -2      #截取前两行
eth0      Link encap:Ethernet  HWaddr 00:0C:29:52:81:65  
          inet addr:10.1.252.233  Bcast:10.1.255.255  Mask:255.255.0.0
[root@CentOS6 ~]# ifconfig | head -2 | tail -1    #截取最后一行
          inet addr:10.1.252.233  Bcast:10.1.255.255  Mask:255.255.0.0
[root@CentOS6 ~]# ifconfig | head -2 | tail -1 | cut -d: -f2    #以:为分隔符,截取第二列
10.1.252.233  Bcast
[root@CentOS6 ~]# ifconfig | head -2 | tail -1 | cut -d: -f2 | cut -d' ' -f1    #取出IP地址
10.1.252.233
[root@CentOS6 ~]#


2.查出分区空间使用率的最大百分比值
[root@CentOS6 ~]# df    #命令输出结果
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda2       50264772 4350148  43354624  10% /
tmpfs             502068      76    501992   1% /dev/shm
/dev/sda1         194241   34110    149891  19% /boot
/dev/sda3       20027260   44992  18958268   1% /testdir
/dev/sr0         3824484 3824484         0 100% /media/CentOS_6.8_Final
[root@CentOS6 ~]# df | tr -s ' '    #压缩空格
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 50264772 4350148 43354624 10% /
tmpfs 502068 76 501992 1% /dev/shm
/dev/sda1 194241 34110 149891 19% /boot
/dev/sda3 20027260 44992 18958268 1% /testdir
/dev/sr0 3824484 3824484 0 100% /media/CentOS_6.8_Final
[root@CentOS6 ~]# df | tr -s ' ' | cut -d' ' -f5    #取出第五列
Use%
10%
1%
19%
1%
100%
[root@CentOS6 ~]# df | tr -s ' ' | cut -d' ' -f5 | sort -n    #数字从小到大排序
Use%
1%
1%
10%
19%
100%
[root@CentOS6 ~]# df | tr -s ' ' | cut -d' ' -f5 | sort -n | tail -1    #取出百分比最大值
100%
[root@CentOS6 ~]# 


3.查出用户UID最大值的用户名、UID及shell类型
[root@CentOS6 ~]# sort -n -t: -k3 /etc/passwd    #UID从小打到排序
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
pulse:x:497:495:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
saslauth:x:498:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
rtkit:x:499:499:RealtimeKit:/proc:/sbin/nologin
zhai:x:500:500::/home/zhai:/bin/bash
hadoop:x:501:501::/home/hadoop:/bin/bash
zaizai:x:502:503::/home/zaizai:/bin/bash
alice:x:503:507::/home/alice:/bin/bash
tom:x:504:508::/home/tom:/bin/bash
user1:x:505:509::/home/user1:/bin/bash
user2:x:506:510::/home/user2:/bin/bash
bash:x:507:511::/home/bash:/bin/bash
testbash:x:508:512::/home/testbash:/bin/bash
basher:x:509:513::/home/basher:/bin/bash
nologin:x:510:514::/home/nologin:/sbin/nologin
mage:x:511:515::/home/mage:/bin/bash
wang:x:512:516::/home/wang:/bin/bash
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
[root@CentOS6 ~]# sort -n -t: -k3 /etc/passwd | tail -1    #取出UID最大的用户
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
[root@CentOS6 ~]# sort -n -t: -k3 /etc/passwd | tail -1 | cut -d: -f1,3,7    #取出用户名、UID、shell
nfsnobody:65534:/sbin/nologin
[root@CentOS6 ~]# 


4.查出/tmp的权限,以数字方式显示
[root@CentOS6 ~]# stat /tmp    #命令执行结果
  File: `/tmp'
  Size: 4096      	Blocks: 8          IO Block: 4096   directory
Device: 802h/2050d	Inode: 1835009     Links: 13
Access: (1777/drwxrwxrwt)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-08-05 11:54:12.000000000 +0800
Modify: 2016-08-06 07:45:28.201523630 +0800
Change: 2016-08-06 07:45:28.201523630 +0800
[root@CentOS6 ~]# stat /tmp | head -4 | tail -1    #取出包含权限的行
Access: (1777/drwxrwxrwt)  Uid: (    0/    root)   Gid: (    0/    root)
[root@CentOS6 ~]# stat /tmp | head -4 | tail -1 | cut -d: -f2    #指定以:为分隔符,取出第二列
 (1777/drwxrwxrwt)  Uid
[root@CentOS6 ~]# stat /tmp | head -4 | tail -1 | cut -d: -f2 | tr -sc '[0-9]' '\n'    #取出八进制权限

1777
[root@CentOS6 ~]#


5.统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序
[root@CentOS6 ~]# netstat -tn    #命令输出结果
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State      
tcp        0      0 10.1.252.233:36635          10.1.252.233:22             ESTABLISHED 
tcp        0      0 10.1.252.233:22             10.1.250.60:58479           ESTABLISHED 
tcp        0      0 10.1.252.233:22             10.1.252.84:40544           ESTABLISHED 
tcp        0      0 10.1.252.233:22             10.1.253.23:35810           ESTABLISHED 
tcp        0      0 10.1.252.233:22             10.1.252.84:40543           ESTABLISHED 
tcp        0      0 10.1.252.233:22             10.1.250.60:58179           ESTABLISHED 
tcp        0      0 10.1.252.233:22             10.1.252.233:36635          ESTABLISHED 
tcp        0      0 10.1.252.233:22             10.1.253.23:35811           ESTABLISHED 
tcp        0      0 10.1.252.233:22             10.1.250.60:61317           ESTABLISHED 
[root@CentOS6 ~]# netstat -tn | tr -s ' '    #压缩空白字符
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State 
tcp 0 0 10.1.252.233:36635 10.1.252.233:22 ESTABLISHED 
tcp 0 0 10.1.252.233:22 10.1.250.60:58479 ESTABLISHED 
tcp 0 0 10.1.252.233:22 10.1.252.84:40544 ESTABLISHED 
tcp 0 0 10.1.252.233:22 10.1.253.23:35810 ESTABLISHED 
tcp 0 0 10.1.252.233:22 10.1.252.84:40543 ESTABLISHED 
tcp 0 0 10.1.252.233:22 10.1.250.60:58179 ESTABLISHED 
tcp 0 0 10.1.252.233:22 10.1.252.233:36635 ESTABLISHED 
tcp 0 0 10.1.252.233:22 10.1.253.23:35811 ESTABLISHED 
tcp 0 64 10.1.252.233:22 10.1.250.60:61317 ESTABLISHED 
[root@CentOS6 ~]# netstat -tn | tr -s ' ' | cut -d' ' -f5    #截取第五列
servers)
Address
10.1.252.233:22
10.1.250.60:58479
10.1.252.84:40544
10.1.253.23:35810
10.1.252.84:40543
10.1.250.60:58179
10.1.252.233:36635
10.1.253.23:35811
10.1.250.60:61317
[root@CentOS6 ~]# netstat -tn | tr -s ' ' | cut -d' ' -f5 | cut -d: -f1    #过滤掉端口号,只留IP地址
servers)
Address
10.1.252.233
10.1.250.60
10.1.252.84
10.1.253.23
10.1.252.84
10.1.250.60
10.1.252.233
10.1.253.23
10.1.250.60
[root@CentOS6 ~]# netstat -tn | tr -s ' ' | cut -d' ' -f5 | cut -d: -f1 | tr -sc '[0-9].' '\n'    #删除IP地址以外的其他字符

10.1.252.233
10.1.250.60
10.1.252.84
10.1.253.23
10.1.252.84
10.1.250.60
10.1.252.233
10.1.253.23
10.1.250.60
[root@CentOS6 ~]# netstat -tn | tr -s ' ' | cut -d' ' -f5 | cut -d: -f1 | tr -sc '[0-9].' '\n' | sort     #将IP地址排序

10.1.250.60
10.1.250.60
10.1.250.60
10.1.252.233
10.1.252.233
10.1.252.84
10.1.252.84
10.1.253.23
10.1.253.23
[root@CentOS6 ~]# netstat -tn | tr -s ' ' | cut -d' ' -f5 | cut -d: -f1 | tr -sc '[0-9].' '\n' | sort  | uniq -c     #显示重复行的重复次数
      1 
      3 10.1.250.60
      2 10.1.252.233
      2 10.1.252.84
      2 10.1.253.23
[root@CentOS6 ~]# netstat -tn | tr -s ' ' | cut -d' ' -f5 | cut -d: -f1 | tr -sc '[0-9].' '\n' | sort  | uniq -c | sort -n -t' ' -k1    #将重复次数从小到大排序
      1 
      2 10.1.252.233
      2 10.1.252.84
      2 10.1.253.23
      3 10.1.250.60
[root@CentOS6 ~]#

正则表达式:Regular Expression 

    由一类特殊字符文本字符所编写的模式,其中有些字符不表示其字面意义,而是用于表示控制或统配的功能

        扩展正则表达式:BRE

        扩展正则表达式:ERE

Linux文本处理三剑客之一:

    grep:文本过滤工具,Global search REgularexpression and Print

    作用:文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查,打印匹配到的行

        grep:基本正则表达式,-E -F

        egrep:扩展正则表达式,-G -F

        fgrep:不支持正则表达式元字符

    grep [OPTIONS…] PATTERN [FILE…]

    

    OPTIONS:

        –color=auto:对匹配到的文本高亮显示

        -i:匹配时忽略大小写

        -o:只显示匹配到的字符(默认会显示整行)

        -v:显示没有被模式所匹配到的行

        -q:静默模式,无论是否匹配成功 都不显示

        -e PAT1 -e PAT2:匹配PAT1或PAT2

        -c:显示匹配到的行数

        -n:显示匹配到的行号

        -E:启用扩展正则表达式

        -A #:显示匹配到的行的后#行

        -B #:显示匹配到的行的前#行

        -C #:显示匹配到的行的前后各#行

        -w:匹配整个单词

    字符匹配:

        .:匹配任意单个字符

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

        [^]:匹配指定范围外任意单个字符

        字符集:[:digit:]:匹配数字

            [:upper:]:匹配大写字母

            [:lower:]:匹配小写字母

            [:alpha:]:匹配大小写字母

            [:alnum:]:匹配字母加数字

            [:space:]:匹配空白字符

            [:punct:]:匹配标点符号

    

    次数匹配:

        *:其前字符出现任意次

        .*:匹配其任意长度任意字符

        \?:匹配其前字符1此或0此

        \+:匹配其前字符至少1次

        \{n\}:匹配其前一个字符n此

        \{m,n\}:匹配其前一个字符至少m此,至多n此

        \{m,\}:匹配其前一个字符至少m此,至多不限

        \{,n\}:匹配其前一个字符至多n此,至少不限

    位置锚定:

        ^:锚定行首,其右边的内容必须出现在行首,此锚定字符必须出现在行首

        $:锚定行尾,其左边的内容必须出现在行尾,此锚定字符必须出现在行尾

        ^$:锚定空白行

        ^PATTERN$:锚定整行内容

            ^[[:space:]]*$:锚定包含空白字符的行

        单词:非特殊字符组成的连续字符(字符串)都成为单词 

        \<或\b:锚定次首,其后面的字符必须出现在词首

        \>或\b:锚定词尾,其前面的字符必须出现在词尾

        \<PATTERN\>:匹配完整单词

    分组及引用:

        \(\):将一个或多个字符捆绑在一起,当做一个整体来处理

    

        后向引用:引用前面括号内的模式所匹配到的所有字符

        分组括号中的模式匹配到的内容会被正则引擎自动记录于内部的变量中,这些变量为;

            \1:引用从最左侧起第一个小括号与之匹配的右括号之间的模式所匹配到的所有字符

            \2:应用从最左侧起第二个小括号与之匹配的右括号之间的模式所匹配到的所有字符

            …

egrep:支持扩展的正则表达式

扩展表达式的元字符:

    字符匹配:

        .:任意单个字符

        []:指定范围内任意单个字符

        [^]:指定范围外任意单个字符

        字符集:

            [:digit:]:匹配数字

            [:space:]:匹配空白字符

            [:alpha:]:匹配大小写字母

            [:alnum:]:匹配字母加数字

            [:upper:]:匹配大写字母

            [:lower:]:匹配小写字母

            [:punct:]:匹配标点符号

    次数匹配:

        *:匹配其前面的字符任意次

        .*:任意长度的任意字符

        ?:前面的字符出现1次或0此

        +:前面的字符至少出现1次

        {n}:匹配其前面的的字符n次

        {m,n}:匹配其前面的字符至少m次,至多n次

        {m,}:匹配其前面的字符至少m此,至多不限

        {,n}:匹配其前面的字符至多n此,至少不限

    位置锚定:

        ^:锚定行首,其右边的内容必须出现在行首,此字符必须写在PATTERN的最左侧

        $:锚定行尾,其左边的内容必须出现在行首,此字符必须写在PATTERN的最右侧

        ^$:匹配空白行

        ^PATTERN$:匹配整行内容

            ^[[:space:]]*$:匹配包含空白字符的行

        单词锚定:

        \<或\b:锚定词首,其右边的内容必须出现在词首

        \>或\b:锚定词尾,其左边的内容必须出现在词首

        \<PATTERN\>:锚定完整单词

    

    分组及引用:

        ():将一个或多个字符捆绑在一起当做一个整体来处理

        

        后向引用:引用前面括号内的模式所匹配到的所有字符

            \1:引用从最左侧起第一个小括号与之匹配的右括号之间的模式所匹配到的所有字符

            \2:应用从最左侧起第二个小括号与之匹配的右括号之间的模式所匹配到的所有字符

            …

    或:

      a|b:a或者b

      C|cat:C或cat

 (c|C)at:cat或Cat

    

        

        

        

        

原创文章,作者:zhai796898,如若转载,请注明出处:http://www.178linux.com/30749