Linux—Shell脚本小工具


引言

对最近经常使用到的一些小命令进行一下整理—— cut、sort、uniq、tr

一、cut 命令

  • cut 是列截取工具
  • 使用说明:cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一

1.常用选项

选项说明
-b按字节截取
-c按字符截取,常用于中文
-d指定以什么为分隔符截取,默认为制表符
-f通常和-d一起

2.用法示例

[root@localhost ~]# cat /etc/passwd | cut -d':' -f 1
root
bin
daemon

[root@localhost ~]# cat /etc/passwd | cut -d':' -f 3
0
1
2
[root@localhost ~]# cat /etc/passwd | cut -d':' -f1,3
root:0
bin:1
daemon:2

[root@localhost ~]# cat /etc/passwd | cut -d':' -f1-3
root:x:0
bin:x:1
daemon:x:2
[root@localhost ~]# who | cut -b 3
o
o
o
[root@localhost ~]# who | cut -c 3
o
o
o
[root@localhost ~]# cat name | cut -b 2
 
 
[root@localhost ~]# cat name | cut -c 2
  • 需要注意:cut只擅长于处理单个字符为间隔的文本

二、sort 命令

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

  • 语法格式如下:

sort [选项] 参数

1. 常用选项

选项说明
-t指定分隔符,默认使用[Tab]键或空格分隔
-k指定排序区域,哪个区间排序
-n按照数字进行排序,默认是以文字形式排序
-u等同于 uniq,表示相同的数据仅显示一行,注意:如果行尾有空格去重就不成功
-r反向排序,默认是升序,-r就是降序
-o将排序后的结果转存至指定文件

2. 用法示例

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

sort -n -t: -k3 passwd.txt    #以冒号为分隔符,以数字大小对第三列排序(升序)

sort -nr -t: -k3 passwd.txt   #以冒号为分隔符,以数字大小对第三列排序(降序)

sort -nr -t: -k3 passwd.txt -o passwd.bak    #将输结果不在屏幕上输出而是输出到passwd.bak文件

sort -u passwd.txt                           #去掉文件中重复的行(重复的行可以是不连续的)
zhangsan
zhangsan
zhangsan
gggggg
lisi

三、uniq 命令

  • 主要用于去除连续的重复行
  • 注意:是连续的行,所以通常和sort结合使用先排序使之变成连续的行再执行去重操作,否则不连续的重复行他不能去重
  • 语法格式如下:
uniq [选项] 参数

1. 常用选项

选项说明
-c对重复的行进行计数;
-d仅显示重复行;
-u仅显示出现一次的行

2. 用法示例

[root@localhost ~]# cat fruit             #创建一个水果类型的文件,一共9行内容
apple
apple
peache
pear
banana
cherry
cherry
banana
orange

[root@localhost ~]# cat fruit | uniq -c      #统计重复行的次数,不连续的重复行他不算做重复行
      2 apple
      1 peache
      1 pear
      1 banana
      2 cherry
      1 banana
      1 orange
[root@localhost ~]# cat fruit | sort | uniq -c   #结合sort使用就是我们想要的效果
      2 apple
      2 banana
      2 cherry
      1 orange
      1 peache
      1 pear
[root@localhost ~]# cat fruit | sort | uniq -d   #结合sort使用,过滤出重复行
apple
banana
cherry
[root@localhost ~]# cat fruit | sort | uniq -u    #结合sort使用,过滤出不重复的行
orange
peache
pear
[root@localhost ~]# cat fruit | sort | uniq      #结合sort使用,去重
apple
banana
cherry
orange
peache
pear
[root@localhost ~]# cat fruit | sort -u          #也可以直接用sort -u
apple
banana
cherry
orange
peache
pear

四、tr 命令

  • 可以用一个字符来替换另一个字符,或者可以完全除去一些字符,也可以用它来除去重复字符。
  • 语法格式如下:
tr [选项]… SET1 [SET2]             #从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。

1. 常用选项

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

2. 用法示例

[root@localhost ~]# cat fruit | tr 'a-z' 'A-Z'
APPLE
APPLE
PEACHE
PEAR
BANANA
CHERRY
CHERRY
BANANA
ORANGE
[root@localhost ~]# cat fruit | tr 'apple' 'APPLE'   #替换是一一对应的字母的替换
APPLE
APPLE
PEAchE
PEAr
bAnAnA
chErry
chErry
bAnAnA
orAngE
[root@localhost ~]# cat fruit | tr 'a' ' '   #把替换的字符用单引号引起来,包括特殊字符
 pple
 pple
pe che
pe r
b n n 
cherry
cherry
b n n 
or nge
[root@localhost ~]# cat fruit | tr 'a' '/'      
/pple
/pple
pe/che
pe/r
b/n/n/
cherry
cherry
b/n/n/
or/nge
[root@localhost ~]# cat fruit | tr 'ap' '/'    #把多个字符替换成一个
///le
///le
/e/che
/e/r
b/n/n/
cherry
cherry
b/n/n/
or/nge
[root@localhost ~]# cat fruit | tr 'apple' 'star'    #把a替换成s,p替换成a,le替换成r
saarr
saarr
arschr
arsr
bsnsns
chrrry
chrrry
bsnsns
'orsngr'
#如果想替换单引号则需要用双引号把单引号引起来,反斜杠转义也不行
[root@localhost ~]# cat fruit | tr "'" '/'     
apple
apple
peache
pear
banana
cherry
cherry
banana
/orange/
[root@localhost ~]# cat fruit | tr -d 'a'    #删除所有a
pple
pple
peche
per
bnn
cherry
cherry
bnn
'ornge'
[root@localhost ~]# cat fruit | tr -d 'apple'    #把所有含有这5个字母的都删除


ch
r
bnn
chrry
chrry
bnn
'orng'
[root@localhost ~]# cat fruit | tr -d '\n'                    #删除换行符
appleapplepeachepearbananacherrycherrybanana'orange'[root@localhost ~]#   
[root@localhost ~]# cat fruit | tr -s 'p'                           #对p字符去重,只保留第一个
aple
aple
peache
pear
banana
cherry
cherry
banana
'orange'
[root@localhost ~]# cat fruit | tr -s '\n'   #遇到多个回车只保留一个回车,相当于去除空行
apple
apple
peache
pear
banana
cherry
cherry
banana
'orange'
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

头发莫的了呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值