前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >shell脚本快速入门之----sort、uniq和tr

shell脚本快速入门之----sort、uniq和tr

作者头像
不吃小白菜
发布2020-09-03 10:15:44
1.2K0
发布2020-09-03 10:15:44
举报

1、sort

sort 是一个以行为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序。例如数据和字符的排序就不一样

(1)语法

sort [选项] 参数

(2)常用选项

-t:指定分隔符,默认使用[Tab]键分隔 -k:指定排序区域 -n:按照数字进行排序 -u:等同于 uniq,表示相同的数据仅显示一行 -r:反向排序,默认是升序,-r就是降序 -o:将排序后的结果转存至指定文件

(3)实例

不加任何选项默认按第一列升序,字母的话就是从a到z由上而下显示

代码语言:javascript
复制
[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

以冒号为分隔符,以数字大小对第三列排序(升序)

代码语言:javascript
复制
[root@server ~]# sort -n -t: -k3 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

以冒号为分隔符,以数字大小对第三列排序(降序)

代码语言:javascript
复制
[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文件

代码语言:javascript
复制
[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文件中重复的行(重复的行可以是不连续的)

代码语言:javascript
复制
[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)实例

不加任何选项就是去掉连续的重复的行然后输出结果

代码语言:javascript
复制
[root@server ~]# cat 1.txt
aaaaa
bbb
3333
3333
ccc
ccc
ccc
111
111
[root@server ~]# uniq 1.txt
aaaaa
bbb
3333
ccc
111

对重复的行记数并显示

代码语言:javascript
复制
[root@server ~]# uniq -c 1.txt
      1 aaaaa
      1 bbb
      2 3333
      3 ccc
      2 111

只显示出重复的行

代码语言:javascript
复制
[root@server ~]# uniq -d 1.txt
3333
ccc
111

只显示没有重复的行

代码语言:javascript
复制
[root@server ~]# uniq -u 1.txt
aaaaa
bbb

3、tr

它可以用一个字符来替换另一个字符,或者可以完全除去一些字符,也可以用它来除去重复字符

(1)语法

用法:tr [选项]… SET1 [SET2] 从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。

(2)常用选项

-d 删除字符 -s 删除所有重复出现的字符,只保留第一个

(3)实例

将小写字母替换成大写字母(tr的替换是一一对应的,比如a就替换成A,b就替换成B……)

代码语言:javascript
复制
[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

代码语言:javascript
复制
[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

将文件中的数字都替换为@

代码语言:javascript
复制
[root@server ~]# tr '0-9' '@' < passwd.txt 
root:x:@:@:root:/root:/bin/bash
bin:x:@:@:bin:/bin:/sbin/nologin
daemon:x:@:@:daemon:/sbin:/sbin/nologin
adm:x:@:@:adm:/var/adm:/sbin/nologin
lp:x:@:@:lp:/var/spool/lpd:/sbin/nologin
sync:x:@:@:sync:/sbin:/bin/sync
shutdown:x:@:@:shutdown:/sbin:/sbin/shutdown
halt:x:@:@:halt:/sbin:/sbin/halt
mail:x:@:@@:mail:/var/spool/mail:/sbin/nologin
operator:x:@@:@:operator:/root:/sbin/nologin

将文件中的 :和 / 都替换成 #(想替换的都可以用单引号引起来,包括空格逗号)

代码语言:javascript
复制
[root@server ~]# tr ':/' '#' < 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

删除所有小写字母

代码语言:javascript
复制
[root@server ~]# tr -d 'a-z' < passwd.txt 
::0:0::/://
::1:1::/://
::2:2::/://
::3:4:://://
::4:7::///://
::5:0::/://
::6:0::/://
::7:0::/://
::8:12::///://
::11:0::/://

删除所有数字和 :和 /

代码语言:javascript
复制
[root@server ~]# tr -d '0-9:/' < passwd.txt 
rootxrootrootbinbash
binxbinbinsbinnologin
daemonxdaemonsbinsbinnologin
admxadmvaradmsbinnologin
lpxlpvarspoollpdsbinnologin
syncxsyncsbinbinsync
shutdownxshutdownsbinsbinshutdown
haltxhaltsbinsbinhalt
mailxmailvarspoolmailsbinnologin
operatorxoperatorrootsbinnologin

删除字母b、i、n,虽然写在一起了,不代表就是以一个单词的形式删除,它会把含有b或i或n的都删除

代码语言:javascript
复制
[root@server ~]# tr -d 'bin' < passwd.txt 
root:x:0:0:root:/root://ash
:x:1:1::/:/s/olog
daemo:x:2:2:daemo:/s:/s/olog
adm:x:3:4:adm:/var/adm:/s/olog
lp:x:4:7:lp:/var/spool/lpd:/s/olog
syc:x:5:0:syc:/s://syc
shutdow:x:6:0:shutdow:/s:/s/shutdow
halt:x:7:0:halt:/s:/s/halt
mal:x:8:12:mal:/var/spool/mal:/s/olog
operator:x:11:0:operator:/root:/s/olog

删除换行符

代码语言:javascript
复制
[root@server ~]# tr -d '\n' < passwd.txt 
root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologin[ro

压缩换行符(删除空行)

代码语言:javascript
复制
[root@server ~]# vim 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

[root@server ~]# tr -s '\n' < 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

压缩重复的字符

代码语言:javascript
复制
[root@server ~]# cat 1.txt
aaaaabbbccc
abcabc
11133334444
134134134

[root@server ~]# tr -s 'abc' < 1.txt
abc
abcabc
11133334444
134134134

也可以用于命令的二次处理,将输出结果的冒号替换成换行

代码语言:javascript
复制
[root@server ~]# echo $PATH | tr -s ":" "\n"
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/root/bin
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、sort
    • (1)语法
      • (2)常用选项
        • (3)实例
        • 2、uniq
          • (1)语法
            • (2)常用选项
              • (3)实例
              • 3、tr
                • (1)语法
                  • (2)常用选项
                    • (3)实例
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档