目录
tr命令
使用tr删除字符串
使用tr压缩字符
sort命令
-n 按整数进行排序
-k 按指定列进行排序
-r 递减排序
-t 指定分隔符 (默认是空白)
uniq 命令
cut 命令
-c 从指定提取范围中提取字符
-f 从指定提取范围中提取字符段
字符转换工具
tr - translate or delete characters
只能对stdin操作,不能直接对文件操作
使用tr转换字符
tr set1 set2
用set2中的字符替换set1中的字符
tr命令不支持直接操作,要想办法将参数信息传递给它
需要使用管道或者<给tr传递参数
例:将PATH变量中所有的:替换成\n
例:用重定向与tr结合替换字符
[root@localhost script]# cat 111.txt
aaaa
bbbb
cccc
dddd
[root@localhost script]# tr a A
AAAA
bbbb
cccc
dddd
=========================================================
linux里面的通配符
*代表任意个任意字符 --》n个任意字符
?代表一个任意的字符
[集合] --》每次都只是取其中的一个
[0-9] : 代表0,1,2,---9 每次只取一个
[a-z] : 代表 a,b,c---z
[A-Z] : 代表A-Z
[a-Z] : 代表小写a-大写Z
[0-Z]:代表 0-9 - Z
############################################################
例:将 /etc/hosts文件全部转换为大写字母
[root@localhost lianxi]# cat /etc/hosts | tr '[a-z]' '[A-Z]'
127.0.0.1 LOCALHOST LOCALHOST.LOCALDOMAIN LOCALHOST4 LOCALHOST4.LOCALDOMAIN4
::1 LOCALHOST LOCALHOST.LOCALDOMAIN LOCALHOST6 LOCALHOST6.LOCALDOMAIN6
############################################################
例:将 /etc/hosts文件中的所有数字和 . 都删除
[root@localhost lianxi]# cat /etc/hosts | tr '[0-9.]' ' '
localhost localhost localdomain localhost localhost localdomain
:: localhost localhost localdomain localhost localhost localdomain
############################################################
tr -d set1
[root@localhost lianxi]# echo 12333456873333 | tr -d 3
1245687
删除所有的数字:
[root@localhost lianxi]# echo 12333456873a333bc | tr -d [0-9]
abc
############################################################
例:删除所有的%
[root@localhost lianxi]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 475M 0 475M 0% /dev
tmpfs tmpfs 487M 0 487M 0% /dev/shm
tmpfs tmpfs 487M 20M 467M 5% /run
tmpfs tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 17G 4.4G 13G 26% /
/dev/sda1 xfs 1014M 138M 877M 14% /boot
tmpfs tmpfs 98M 0 98M 0% /run/user/0
[root@localhost lianxi]# df -Th | tr -d %
文件系统 类型 容量 已用 可用 已用 挂载点
devtmpfs devtmpfs 475M 0 475M 0 /dev
tmpfs tmpfs 487M 0 487M 0 /dev/shm
tmpfs tmpfs 487M 20M 467M 5 /run
tmpfs tmpfs 487M 0 487M 0 /sys/fs/cgroup
/dev/mapper/centos-root xfs 17G 4.4G 13G 26 /
/dev/sda1 xfs 1014M 138M 877M 14 /boot
tmpfs tmpfs 98M 0 98M 0 /run/user/0
############################################################
例:用数组将df -Th 中以/结尾的这一行中的26截取出来,不要保留%
[root@localhost lianxi]# num1=($(df -Th | grep "/$" | tr -d %))
[root@localhost lianxi]# echo ${num1[5]}
26
############################################################
tr -s SET
将连续相同的字符压缩成一个字符
[root@localhost lianxi]# echo 12334455 | tr -s 345
12345
[root@localhost lianxi]# echo 12334455 | tr -s 34
123455
[root@localhost lianxi]# echo 1111111112233333333334545484 | tr -s 123
1234545484
############################################################
例:将df中连续的空格压缩成一个空格
[root@localhost lianxi]# df
文件系统 1K-块 已用 可用 已用% 挂载点
devtmpfs 485772 0 485772 0% /dev
tmpfs 497836 0 497836 0% /dev/shm
tmpfs 497836 20304 477532 5% /run
tmpfs 497836 0 497836 0% /sys/fs/cgroup
/dev/mapper/centos-root 17811456 4595472 13215984 26% /
/dev/sda1 1038336 140424 897912 14% /boot
tmpfs 99568 0 99568 0% /run/user/0
[root@localhost lianxi]# df | tr -s
文件系统 1K-块 已用 可用 已用% 挂载点
devtmpfs 485772 0 485772 0% /dev
tmpfs 497836 0 497836 0% /dev/shm
tmpfs 497836 20304 477532 5% /run
tmpfs 497836 0 497836 0% /sys/fs/cgroup
/dev/mapper/centos-root 17811456 4595472 13215984 26% /
/dev/sda1 1038336 140424 897912 14% /boot
tmpfs 99568 0 99568 0% /run/user/0
############################################################
sort是一个排序的命令
默认按每行的第一个字符排序
根据首字母的ASCII码值进行升序(从小到大排列)
ASCII码 (美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言
-n : 按整数进行排序
-r : 递减排序
指定排序键
指定按哪一列数据进行排序
-k : 指定哪一列为排序键
############################################################
例:
[root@localhost script]# cat student_info.txt
name age sex chinese math english
cali 36 m 80 70 75
zhao 20 m 70 60 85
wang 21 m 83 87 95
zhou 20 F 85 85 89
liu 18 m 75 65 98
############################################################
[root@localhost script]# cat student_info.txt | sort -k 4 -n
name age sex chinese math english
zhao 20 m 70 60 85
liu 18 m 75 65 98
cali 36 m 80 70 75
wang 21 m 83 87 95
zhou 20 F 85 85 89
[root@localhost script]# cat student_info.txt | sort -k 4 -n -r
zhou 20 F 85 85 89
wang 21 m 83 87 95
cali 36 m 80 70 75
liu 18 m 75 65 98
zhao 20 m 70 60 85
name age sex chinese math english
############################################################
指定分隔符
例:根据 /etc/passwd 文件里第三个字段的数值大小进行降序排列
[root@localhost script]# cat /etc/passwd | sort -rn -k 3 -t : kimi3:x:1016:1016::/home/kimi3:/bin/bash linhucong:x:1015:1015::/huashan:/bin/bash kimi:x:1014:1014::/home/kimi:/bin/bash zhaojunjie:x:1013:1013::/home/zhaojunjie:/bin/bash wangyi:x:1012:1012::/home/wangyi:/bin/bash zhouyiwei:x:1011:1011::/home/zhouyiwei:/bin/bash shimengmeng:x:1010:1010::/home/shimengmeng:/bin/bash cali123:x:1008:1008::/home/cali123:/bin/bash califeng:x:1007:1007::/home/califeng:/bin/bash lilanqing:x:1006:1006::/home/lilanqing:/bin/bash yalin:x:1005:1005::/home/yalin:/bin/bash wangshenghu:x:1004:1004::/home/wangshenghu:/bin/bash zhangjian:x:1003:1003::/home/zhangjian:/bin/bash zhnagjian:x:1002:1002::/home/zhnagjian:/bin/bash chenhang:x:1001:1001::/home/chenhang:/bin/bash xiaowang:x:1000:1000::/home/xiaowang:/bin/bash polkitd:x:999:998:User for polkitd:/:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin kimi2:x:996:994::/home/kimi2:/bin/bash systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin 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
############################################################
删除经过排序后的数据的重复记录
去重 --》去除重复的数据,必须是连续的重复的行
统计重复的数据
-c 统计重复的数据
############################################################
例:
写一个脚本进行nginx 日志统计,得到访问ip最对的前10
其中 nginx的日志路径:
access.log 日志访问文件,记录了谁访问了网站,失败还是成功
/var/log/nginx/access.log
[root@localhost nginx]# cat access.log | awk '{print $1}'|uniq -c|sort -nr
18 192.168.44.130
4 192.168.44.1
统计哪个状态码最多
[root@localhost nginx]# cat access.log | awk '{print $9}' | sort|uniq -c
21 200
1 404
############################################################
和awk一样都是截取文本的命令
从文本文件或者文本流中提取文本列
cut -选项 提取范围 文本文件
常见选项
提取范围:
n:第n项
n-:第n项到行尾
-m:行首到第m项
n,m:第n项和第m项--》单个的
n-m : 第n项到第m项 --》 连续的
############################################################
例:-c提取字符,下标从1开始
[root@localhost script]# echo 123456|cut -c 3
3
[root@localhost script]# echo 123456|cut -c 0
cut: 序号从1 开始计数
Try 'cut --help' for more information.
[root@localhost script]# echo 123456|cut -c 5
5
[root@localhost script]# echo adfv12fefda3 |cut -c 1,3,5
af1
############################################################
-f 提取字符段,-d 指定分隔符
[root@localhost script]# cat /etc/passwd | cut -d : -f 1,3
root:0
bin:1
daemon:2
adm:3
lp:4
sync:5
shutdown:6
halt:7
mail:8
operator:11
games:12
ftp:14
nobody:99
systemd-network:192
dbus:81
polkitd:999
sshd:74
postfix:89
chrony:998
xiaowang:1000
chenhang:1001
zhnagjian:1002
zhangjian:1003
wangshenghu:1004
yalin:1005
nginx:997
lilanqing:1006
tss:59
califeng:1007
cali123:1008
ntp:38
shimengmeng:1010
zhouyiwei:1011
wangyi:1012
zhaojunjie:1013
kimi:1014
kimi2:996
linhucong:1015
kimi3:1016