感谢支持
我们一直在努力

Linux文本处理工具及grep

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

本章节主要讲解的内容有:
文件查看:cat
分页查看文本:less、more
抽取文件特定行数:head、tail
抽取文本特定列:cut
合并文本:paste
文本统计:wc
文本排序并统计:sort、uniq
比较文件:diff、patch

cat:连结查看文本和输出至标准输出
    -n:为每行添加行号
    -A:显示所有控制符
    -E:为每行显示结束符$
    -s:压缩重复的空白行
    -b:非空行进行编号
[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 ~]#

nl:将文件每行添加行号显示

tac:逆序显示文件内容
rev:反向显示文件内容

more: 分页查看文件
more [OPTIONS…] FILE…
-d: 显示翻页及退出提示

less:一页一页查看文本文件
查看时有用的命令包括:
/文本搜索文本
n/N跳到下一个or 上一个匹配

head:抽取文本前n行
    -n #:抽取文本前#行
    -c #:抽取文本前#个字节7
    -#:指定行数

tail:抽取文本后n行
    -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:抽取文本
    -d DELIMITER:指明分隔符,默认tab
    -f FILEDS:
        #:第#个字段
        #,#:离散表示法,例如1,3,5
        #-#:连续表示法,例如1-3
        #,#-#,#:混合表示法例如,1,3-5,7
    -c:按字符切割
    –output-delimiter:指定输出分隔符
123456789 [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:合并文本
    -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:文本统计
    -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:文本排序
    -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:统计重复的行
    -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机制,即显示要修改的行的上下文,默认为三行

patch:向文件打补丁
    path [OPTIONS] -i /PATH/TO/PATCH_FILE /PATH/TO/OLDFILE
    patch /PATH/TO/OLDFILE < /PATH/TO/PATCH_FILE

更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2017-03/142277p2.htm 

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

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
Linux上文本处理三剑客:
    grep:文本过滤工具(模式:pattern)
    grep:基本正则表达式,-E,-F
    egrep:扩展正则表达式,-G,-F
    fgrep:不支持正则表达式
    sed:stream editor,流编辑器;文本编辑工具
    awk:Linux上的实现为gawk,文本报告生成器(格式化文本)

正则表达式:Regular Expression,REGEXP
由一类特殊字符文本字符所编写的模式,其中有些字符不表示其字面意义,而是用于表示控制或统配的功能
    分两类:
    基本正则表达式:BRE
    扩展正则表达式:ERE
   
    元字符:

grep:文本过滤工具
作用:文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查,打印匹配到的行
模式:由正则表达式的元字符及文本字符所编写出的过滤条件

    正则表达式引擎:
    grep [OPTIONS] PATTERN [FILE…]
    grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]

OPTIONS:
    –color=auto:对匹配到的文本着色后高亮显示
    -i:在匹配时忽略大小写
    -o:只显示匹配到的字符串
    -v:显示没有被匹配到的内容
    -E:使用扩展正则表达式
    -q:静默模式,无论匹配到或匹配不到都不输出任何信息
    -A #:显示被匹配到的行的后#行
    -B #:显示被匹配到的行的前#行
    -C #:显示被匹配到的行的前后各#行
    -e PAT1 -e PAR2:匹配PAT1或PAT2

    -w:匹配完整单词

    -c:显示匹配到的行数

    -n:显示匹配到的行号

基本正则表达式的元字符:
    字符匹配:
    .:匹配任意单个字符
    []:匹配指定范围内任意单个字符
    [^]:匹配指定范围外任意单个字符
    [:space:],[:digit:],[:alpha:],[:alnum:],[:punct:],[:upper:],[:lower:]

匹配次数:用在要指定其出现的次数的字符后面,用于限制其前面字符出现的次数,默认工作于贪婪模式
    *:匹配其前面字符出现任意次
    .*:表示匹配任意长度的任意字符
    \?:匹配其前面字符出现1次或0次,(可有可无)
    \+:匹配其前面的字符至少出现1次
    \{m\}:匹配其前面的字符m次
    \{m,n\}:其匹配前一个字符至少m次,至多n次
    \{m,\}:至少m次
    \{0,n\}:至多n次

位置锚定:
    ^:其后面的字符必须出现在行首,用于模式的最左侧
    $:其后面的字符必须出现在行尾,用于模式的最右侧
    ^PATTERN$:用于PATTERN来匹配整行
    ^$:匹配空白行
    ^[[:space:]]*$:匹配包含空格的空白行
   
    单词:非特殊字符组成的连续字符(字符串)都成为单词
   
    \<或\b:锚定词首,其后面的字符必须出现在词首,用于单词模式的左侧
    \>或\b:锚定词尾,其后面的字符必须出现在词尾,用于单词模式的右侧
    \<PATTERN\>:匹配完整单词

分组及引用:
    \(\):将一个或多个字符捆绑子一起,当做一个整体进行处理
   

    note:分组括号中的模式匹配到的内容会被正则引擎自动记录于内部的变量中,这些变量为;
    \1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符
    \2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符
    \3:
    …
   
    后向引用:引用前面的分组括号中的模式所匹配到的字符

egrep:

    支持扩展的正则表达式实现类似于grep文本过滤功能:grep -E
   
    grep [OPTIONS] PATTERN [FILE…]
    选项:
    -i, -o, -v, -q, -A, -B, -C
    -G:支持基本正则表达式
   
    扩展正则表达式的元字符:
    字符匹配:
        .:任意单个字符
        []:指定范围内任意单个字符
        [^]:指定范围外的任意单个字符

    次数匹配:
        *:任意次,0、1或多次
        +:其前面的字符至少出现1次
        ?:其前面的字符出现0次或1次
        {m}:其前面的字符出现m次
        {m,n}:至少m次,至多n次
        {0,n}:至多n次,至少不限
        {m,}:至少m次,至多不限

    位置锚定:
        ^:行首锚定
        $:行尾锚定
        \<,\b:词首锚定
        \>,\b:词尾锚定

    分组引用:
        ():分组;括号内的模式匹配到的字符会被记录于正则表达式引擎的内部变量中
        后向应用:\1,\2,\3,…

    或:
        a|b:a或者b
        C|cat:C或cat
        (c|C)at:cat或Cat

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-03/142277.htm

赞(0) 打赏
转载请注明出处:服务器评测 » Linux文本处理工具及grep
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏