1、sort
sort 是一个以行为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序。例如数据和字符的排序就不一样
(1)语法
sort [选项] 参数
(2)常用选项
-t:指定分隔符,默认使用[Tab]键分隔
-k:指定排序区域
-n:按照数字进行排序
-u:等同于 uniq,表示相同的数据仅显示一行
-r:反向排序,默认是升序,-r就是降序
-o:将排序后的结果转存至指定文件
(3)实例
不加任何选项默认按第一列升序,字母的话就是从a到z由上而下显示
下面展示一些
[root@server ~]# sort passwd.txt
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync
以冒号为分隔符,以数字大小对第三列排序(升序)
下面展示一些 内联代码片
。
[root@server ~]# sort -nr -t: -k3 passwd.txt
operator:x:11:0:operator:/root:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
将输结果不在屏幕上输出而是输出到passwd.bak文件
下面展示一些 内联代码片
。
[root@server ~]# sort -nr -t: -k3 passwd.txt -o passwd.bak
[root@server ~]#
[root@server ~]# cat passwd.bak
operator:x:11:0:operator:/root:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
去掉1.txt文件中重复的行(重复的行可以是不连续的
[root@server ~]# cat 1.txt
aaaaa
bbb
3333
ccc
111
3333
ccc
111
4444
[root@server ~]# sort -u 1.txt
111
3333
4444
aaaaa
bbb
ccc
2、uniq
主要用于去除连续的重复行
(1)语法
uniq [选项] 参数
(2)常用选项
-c:对重复的行进行计数;
-d:仅显示重复行;
-u:仅显示出现一次的行
(3)实例
不加任何选项就是去掉连续的重复的行然后输出结果
下面展示一些 内联代码片
。
[root@server ~]# cat 1.txt
aaaaa
bbb
3333
3333
ccc
ccc
ccc
111
111
[root@server ~]# uniq 1.txt
aaaaa
bbb
3333
ccc
111
对重复的行记数并显示
下面展示一些 内联代码片
。
[root@server ~]# uniq -c 1.txt
1 aaaaa
1 bbb
2 3333
3 ccc
2 111
只显示出重复的行
下面展示一些 内联代码片
。
[root@server ~]# uniq -d 1.txt
3333
ccc
111
只显示没有重复的行
下面展示一些 内联代码片
。
[root@server ~]# uniq -u 1.txt
aaaaa
bbb
3、tr
它可以用一个字符来替换另一个字符,或者可以完全除去一些字符,也可以用它来除去重复字符
(1)语法
用法:tr [选项]… SET1 [SET2]
从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。
(2)常用选项
-d 删除字符
-s 删除所有重复出现的字符,只保留第一个
将小写字母替换成大写字母(tr的替换是一一对应的,比如a就替换成A,b就替换成B……)
下面展示一些 内联代码片
。
[root@server ~]# tr 'a-z' 'A-Z' < passwd.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
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
OPERATOR:X:11:0:OPERATOR:/ROOT:/SBIN/NOLOGIN
将bin替换成abc,就是将b替换成a,i替换成b,n替换成c
下面展示一些 内联代码片
。
[root@server ~]# tr 'bin' 'abc' < passwd.txt
root:x:0:0:root:/root:/abc/ash
abc:x:1:1:abc:/abc:/sabc/cologbc
daemoc:x:2:2:daemoc:/sabc:/sabc/cologbc
adm:x:3:4:adm:/var/adm:/sabc/cologbc
lp:x:4:7:lp:/var/spool/lpd:/sabc/cologbc
syc:x:5:0:syc:/sabc:/abc/syc
shutdowc:x:6:0:shutdowc:/sabc:/sabc/shutdowc
halt:x:7:0:halt:/sabc:/sabc/halt
mabl:x:8:12:mabl:/var/spool/mabl:/sabc/cologbc
operator:x:11:0:operator:/root:/sabc/cologbc
删除所有数字和 :和 /
下面展示一些 内联代码片
。
[root@server ~]# tr -d '0-9:/' < passwd.txt
rootxrootrootbinbash
binxbinbinsbinnologin
daemonxdaemonsbinsbinnologin
admxadmvaradmsbinnologin
lpxlpvarspoollpdsbinnologin
syncxsyncsbinbinsync
shutdownxshutdownsbinsbinshutdown
haltxhaltsbinsbinhalt
mailxmailvarspoolmailsbinnologin
operatorxoperatorrootsbinnologin
压缩重复的字符
下面展示一些 内联代码片
。
[root@server ~]# cat 1.txt
aaaaabbbccc
abcabc
11133334444
134134134
[root@server ~]# tr -s 'abc' < 1.txt
abc
abcabc
11133334444
134134134