1. tr 命令——替换、压缩、删除
tr (Text Replacer) 命令常用来对来自标准输入的字符进行替换、压缩和删除。
命令格式 :tr [选项]... SET1 [SET2]
(SET 是一组字符串,一般都可按照字面含义理解)
选项:
-d
删除-s
压缩
[root@node1 ~]# tr 1 a //遇到1换成a
111
aaa
123
a23
[root@node1 ~]# tr -d 1 //把1删除
111
123
23
[root@node1 ~]# tr -s 1 //压缩连续的1
111
1
123
123
1123
123
[root@node1 ~]# tr -s " " //压缩连续的空格
1 2
1 2
12 3
12 3
[root@node1 ~]# tr '[a-z]' '[A-Z]' //将所有小写字母替换为大写
abc
ABC
`cat file | tr [选项] 参数`
生成随机密码:
cat /dev/urandom |tr -dc '[:alnum:]' |head -c12
2. cut命令——切列
cut 命令可以提取文本文件数据的指定列。
命令格式 : cut [选项]... [文件]...
选项:
-d
指明分隔符-f
想要获取的字段- #: 第#个字段,例如 3
- #,#[,#]:离散的多个字段,例如 1,3,6
- #-#:连续的多个字段, 例如 1-6
[root@node1 ~]# cut -d: -f1,3 /etc/passwd |head //以冒号作为分隔的条件,取文件的第1列和第3列
root:0
bin:1
daemon:2
adm:3
lp:4
sync:5
shutdown:6
halt:7
mail:8
operator:11
`cat file | cut [选项] 参数`
注意!不能将连续的字符当作分隔符
[root@node1 ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/centos-root 40137576 4841480 35296096 13% /
devtmpfs 917604 0 917604 0% /dev
tmpfs 933524 0 933524 0% /dev/shm
tmpfs 933524 17436 916088 2% /run
tmpfs 933524 0 933524 0% /sys/fs/cgroup
/dev/mapper/centos-home 19593216 36968 19556248 1% /home
/dev/sda1 1038336 182368 855968 18% /boot
tmpfs 186708 32 186676 1% /run/user/0
/dev/sr0 4414592 4414592 0 100% /run/media/root/CentOS 7 x86_64
[root@node1 ~]# df |cut -d" " -f1,5 //以空格为分隔符,取第1和第5列
文件系统
/dev/mapper/centos-root
devtmpfs
tmpfs
tmpfs
tmpfs
/dev/mapper/centos-home 36968
/dev/sda1
tmpfs
/dev/sr0 //内容错误,因为有连续的空格,不能将连续的字符当作分隔符!
[root@node1 ~]# df |tr -s " " |cut -d" " -f1,5 //先将空行压缩成一个,再提取
文件系统 已用%
/dev/mapper/centos-root 13%
devtmpfs 0%
tmpfs 0%
tmpfs 2%
tmpfs 0%
/dev/mapper/centos-home 1%
/dev/sda1 18%
tmpfs 1%
/dev/sr0 100%
[root@node1 ~]# df |tail -n +2|tr -s " " |cut -d " " -f5|tr -d % //去除百分号,对比数字
13
0
0
2
0
1
18
1
100
3. sort命令——排序
把整理过的文本显示在屏幕上,不改变原始文件。sort将文件的每一行作为一个单位相互比较,比较原则是从首字符向后依次按ASCII码进行比较,最后将它们按升序输出。
命令格式 : sort [options] file(s)
选项:
-n
按照数字大小进行排序(默认升序)-r
倒序排序-k
指定列-t
指定分隔符
[root@node1 ~]# cat /etc/passwd |head
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@node1 ~]# cat /etc/passwd |head |cut -d: -f3 |sort -nr //以冒号为分隔符,取第三列,并按数字大小倒序排序
11
8
7
6
5
4
3
2
1
0
`cat file | sort 选项`
4. uniq命令——去重
uniq(unique 唯一)是一个用于文本处理中删除重复行的工具(只能将连续的重去掉),常与sort命令结合使用。
命令格式 : uniq [OPTION]... [FILE]...
选项:
-c
显示每行重复出现的次数-u
仅显示不曾重复的行-d
仅显示重复过的行
[root@node1 ~]# cat 123
1
0
1
1
2
2
3
3
3
4
[root@node1 ~]# cat 123 |uniq //去重
1
0
1
2
3
4
[root@node1 ~]# cat 123 |uniq -c //显示每行重复出现的次数
1 1
1 0
2 1
2 2
3 3
1 4
[root@node1 ~]# cat 123 |uniq -u //仅显示不曾重复的行
1
0
4
[root@node1 ~]# cat 123 |uniq -d //仅显示重复过的行
1
2
3
`cat file | uniq 选项`
`面试题:`查看访问日志,找出访问前10名的用户
cat access_log |cut -d “ ” -f1 |sort -n |uniq -c |sort -nr |head
[root@localhost ~]# cat access_log|cut -d" " -f1 //先取地址
[root@localhost ~]# cat access_log|cut -d" " -f1|sort //再排序一样的ip地址在一起
[root@localhost ~]# cat access_log|cut -d" " -f1|sort|uniq -c //去重
[root@localhost ~]# cat access_log|cut -d" " -f1|sort|uniq -c|sort -nr |head //再数字排序,取前10行
5. seq命令
seq命令是 sequence 的缩写,用于打印数字序列。
[root@node1 ~]# seq 6
1
2
3
4
5
6
[root@node1 ~]# seq -s+ 6
1+2+3+4+5+6
[root@node1 ~]# seq -s+ 6 |bc //求1-6的和,bc是计算命令
21