文章目录
前言
做一个在shell中比较常用的小工具的一个合集
一、cut
1.使用说明
cut:列截取工具
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一
2.选项
选项 | 含义 |
---|---|
-b | 按字节截取 |
-c | 按字符截取,常用于中文 |
-d | 指定以什么为分隔符截取,默认为制表符 |
-f | 通常和-d一起 |
3.用法示例
[root@localhost ~]# cat /etc/passwd | cut -d':' -f 1
root
bin
daemon
[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
1.使用说明
sort 是一个以行为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序。
例如数据和字符的排序就不一样
- 语法:
sort [选项] 参数
2.常用选项
选项 | 含义 |
---|---|
-t | 指定分隔符,默认使用[Tab]键或空格分隔 |
-k | 指定排序区域,哪个区间排序 |
-n | 按照数字进行排序,默认是以文字形式排序 |
-u | 等同于 uniq,表示相同的数据仅显示一行,注意:如果行尾有空格去重就不成功 |
-r | 反向排序,默认是升序,-r就是降序 |
-o | 将排序后的结果转存至指定文件 |
3.用法示例
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
1.使用说明
主要用于去除连续的重复行
注意:是连续的行,所以通常和sort结合使用先排序使之变成连续的行再执行去重操作,否则不连续的重复行他不能去重
- 语法:
uniq [选项] 参数
2.常用选项
选项 | 含义 |
---|---|
-c | 对重复的行进行计数; |
-d | 仅显示重复行; |
-u | 仅显示出现一次的行 |
3.用法示例
#创建一个水果类型的文件,一共9行内容
[root@localhost ~]# cat fruit
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
#结合sort使用就是我们想要的效果
[root@localhost ~]# cat fruit | sort | uniq -c
2 apple
2 banana
2 cherry
1 orange
1 peache
1 pear
#结合sort使用,过滤出重复行
[root@localhost ~]# cat fruit | sort | uniq -d
apple
banana
cherry
#结合sort使用,过滤出不重复的行
[root@localhost ~]# cat fruit | sort | uniq -u
orange
peache
pear
#结合sort使用,去重
[root@localhost ~]# cat fruit | sort | uniq
apple
banana
cherry
orange
peache
pear
[root@localhost ~]# cat fruit | sort -u //也可以直接用sort -u
apple
banana
cherry
orange
peache
pear
实例1:查看登陆用户
[root@localhost ~]# who
root :0 2021-04-29 00:09 (:0)
root pts/0 2021-04-29 00:09 (:0)
root pts/1 2021-06-10 01:32 (192.168.245.1)
[root@localhost ~]# who | awk '{print $1}'
root
root
root
[root@localhost ~]# who | awk '{print $1}'| uniq
root
实例2:查看登陆过系统的用户
[root@localhost ~]# last | awk '{print $1}' | sort | uniq | grep -v "^$" | grep -v wtmp
reboot
root
shengjie
四、tr
1.使用说明
它可以用一个字符来替换另一个字符,或者可以完全除去一些字符,也可以用它来除去重复字符
- 语法:
tr [选项]… SET1 [SET2]
从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。
2.常用选项
选项 | 含义 |
---|---|
-d | 删除字符 |
-s | 删除所有重复出现的字符,只保留第一个 |
3.用法示例
[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'