文本处理工具及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

(0)
zhai796898zhai796898
上一篇 2016-08-08
下一篇 2016-08-08

相关推荐

  • 你收到来自一个来自noob的blog,请注意查收~

                  本人较为懒,部分内容为直接cp,勿怪                 图片借鉴余知乎某位深藏不漏的用户 关于ls命令输出结果的详解:     1 如何知道自己当前…

    2017-09-03
  • Linux发展史

    Linux系统的发展史           内容摘要:            Linux操作系统的诞生       &n…

    Linux干货 2016-10-18
  • 8.9_Linux文本处理三剑客之sed和文本编辑利器vim的使用

    本文处理三剑客之sed的使用   什么是sed? Stream EDitor(简称sed), 行编辑器,一次只读一行,只处理一行,不对源文件做处理,至输出到屏幕上。 sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓…

    Linux干货 2016-08-11
  • 8月3日课堂笔记

    课堂笔记 linux用户和组管理(非常非常重要)    用户管理和组管理各种相关的应用程序    简单的管理命令 安全上下文:   每次对主机操作都是以发起一个进程来完成的,进程代表着人来执行操作,进程以其发起者的身份来运行;所以开机时有很多守护类的进程,我们应该以普通身份来运行,普通用户通常都是系统用户;从来不用登陆系统的;进程对文件的访问权限,取决于发起…

    Linux干货 2016-08-04
  • python装饰器详解

    python之装饰器详解 一、装饰器定义 定义一个函数,可以接受一个函数作为参数,对该函数进行一些包装,不改变函数的本身。 二、装饰器四部曲(分解) 1、函数可赋值给变量。若赋值给变量的是调用后的函数,变量的值就是return的返回值。 切记:函数赋值给变量,只看return的值。分清楚函数是处于调用状态还是未被调用状态。若函数没有写return,默认ret…

    2017-02-08
  • 8-2 作业

    8-2作业     1.在/data/testdir里创建的新文件自动属于g1组,组g2的成员如:alice能对这些新文件有读写权限,组g3的成员如:tom只能对新文件有读权限,其它用户(不属于g1,g2,g3)不能访问这个文件夹。 2.创建组sales,gid 3000,passwd:centos,sales admins:user2。…

    Linux干货 2016-08-05