细说Linux系统管理
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.3 字符处理命令

3.3.1 排序命令sort

sort是Linux的排序命令,而且可以依据不同的数据类型来进行排序。sort将文件的每一行作为一个单位,相互比较。比较原则是从首字符向后,依次按ASCII码值进行比较,最后将它们按升序输出。命令格式如下:

    [root@localhost ~]# sort [选项] 文件名
    选项:
        -f:         忽略大小写
        -b:         忽略每行前面的空白部分
        -n:         以数值型进行排序,默认使用字符串型排序
        -r:         反向排序
        -u:         删除重复行。就是uniq命令
        -t:         指定分隔符,默认分隔符是制表符
        -k n[, m]:  按照指定的字段范围排序。从第n个字段开始,到第m个字段结束(默认到行尾)

sort命令默认是用每行开头的第一个字符来进行排序的,比如:

    [root@localhost ~]# sort /etc/passwd
    #排序用户信息文件
    abrt:x:173:173::/etc/abrt:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    apache:x:48:48:Apache:/var/www:/sbin/nologin
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    …省略部分输出…

如果想要反向排序,则使用“-r”选项,比如:

    [root@localhost ~]# sort -r /etc/passwd
    #反向排序
    vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
    uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
    tcpdump:x:72:72::/:/sbin/nologin
    …省略部分输出…

如果想要指定排序的字段,则需要使用“-t”选项指定分隔符,并使用“-k”选项指定字段号。假如我想要按照UID字段排序/etc/passwd文件,命令如下:

    [root@localhost ~]# sort -t ":" -k 3,3 /etc/passwd
    #指定分隔符是“:”,以第三个字段开头,以第三个字段结尾排序,也就是只用第三个字段排序
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    abrt:x:173:173::/etc/abrt:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    …省略部分输出…

看起来好像很美,可是如果仔细看看,怎么daemon用户的UID是2,反而排在了下面?这是因为sort默认是按照字符排序的,前面用户的UID的第一个字符都是1,所以这么排序。要想按照数字排序,请使用“-n”选项,比如:

    [root@localhost ~]# sort -n -t ":" -k 3,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
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    …省略部分输出…

当然,“-k”选项可以直接使用“-k 3”,代表从第三个字段到行尾都排序(第一个字段先排序,如果一致,则第二个字段再排序,直到行尾)。

3.3.2 uniq命令

uniq是用来取消重复行的命令,其实和“sort -u”选项是一样的。命令格式如下:

    [root@localhost ~]# uniq [选项] 文件名
    选项:
        -i:    忽略大小写

这个命令非常简单,不再举例了。

3.3.3 统计命令wc

wc命令我们在前面已经用到了,在这里详细讲解一下这个统计命令。命令格式如下:

    [root@localhost ~]# wc [选项] 文件名
    选项:
        -l:只统计行数
        -w:只统计单词数
        -m:只统计字符数

用这个命令统计一下/etc/passwd文件中到底有多少行、多少个单词、多少个字符,命令如下:

    [root@localhost ~]# wc /etc/passwd
      32   551537 /etc/passwd

还记得我们用wc命令统计服务器上有多少个正常连接吗?

    [root@localhost ~]# netstat -an | grep  ESTABLISHED | wc -l
    4

超哥的实验服务器只是一台虚拟机,所以只有4个连接。