上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个连接。