shell常用工具

一 sort

依据不同的数据类型进行排序

  1. **字符排序
  2. 数字排序**
1.1 语法格式
sort  +选项参数
1.2 常用选项
选项描述e
-f忽略大小写
-b忽略每行前面的空格
-M按照月份进行排序
-n按照数字进行排序
-r反向排序
-u等同于uniq,表示相同的数据仅显示一行
-t指定分隔符,默认使用Tab按键分割
-o<输出文件>将排序后的结果转存至指定文件
-k指定排序区域
1.3 工具用法实例
  1. 按照用户的uid进行升序排列
sort -n -t: -k3 passwd 
  1. 按照用户的uid进行降序排列
sort -nr -t: -k3 passwd
  1. 按照数字排序
sort -n passwd 
  1. 按照数字排序并且去重
sort -nu passwd
sort -nr passwd 
sort -nru passwd 
  1. 按照数字排序并将结果重定向到文件
sort -n passwd -o 1.txt 
sort -R passwd 
sort -u passwd 

二 unig工具

  1. 去重 排序 对连续排序使用
    用于报告或者忽略文件中的重复行
    一般与sort命令结合使用
2.1 命令格式
uniq 选项参数
2.2 常用选项
选项说明
-c统计出现的次数(count)
-d只显示被计算为重复的行
-D显示所有被计算为重复的行
-u显示唯一值,即没有重复值的行
-i忽略大小写
-z在末尾使用\0,而不是换行符
-f跳过多少个字段(field)开始比较重复值
-s跳过多少个字符开始比较重复值
-w比较重复值时每行比较的最大长度。即对每行多长的字符进行比较

示例

 sort uniq.txt | uniq //排序后去重
 sort uniq.txt | uniq  -d -c// 使用-d -c统计重复行出现的次数。

sort uniq.txt | uniq -D -c
-c不能和-D一起使用。结果说显示所有重复行再统计重复次数是毫无意义的行为。

三 tr

  1. tr主要用于将从标准输入读取的数据进行结果集映射、字符压缩和字符删除。
  2. 它首先会将读取的标准输入进行排序然后按照某种方式换行,然后再根据给出的命令行参数做相关处理。
3.1 命令格式
 tr [options] [SET1] [SET2 ]
3.2 选项
选项说明
-c使用SET1的补集
-d删除字符
-s压缩字符
-t截断SET1,使得SET1的长度和SET2的长度相同
3.3 tr映射
  1. 如果同时指定了SET1和SET2,则是将SET1的符号按位置一一对应映射为SET2中的符号。换句话说,就是对应替换。
  2. tr接收到stdin后首先会把将结果按照某种标记符号进行换行。
  3. 之所以说tr是映射而不是替换,是因为两个结果集替换的时候符号位置是一一对应的。如果SET1比SET2短,则SET2多余的部分会被忽略,如果SET1比SET2长,POSIX认为这是不合理的,但也能执行,只不过结果有些意料之外,见下文。例如下面的例子,因为SET1中只有一个符号"\n",于是替换时SET2中的Y被忽略。
[root@localhost ~]# ls | tr "\n" "XY" 
anaconda-ks.cfgXf1.txXf1.txtXinitial-setup-ks.cfgX[root]
  1. 这样就可以实现简单的加密和解密
[root@localhost ~]# echo "12345" | tr "0-9" "9876543210"
87654
[root@localhost ~]# echo "87654" | tr "0-9" "9876543210"
12345
  1. 前面的过程是将管道左边的12345对应到0-9的展开式0123456789,并将对应位映射到SET2的数字上。解密也是同理。
3.4 完全对应的替换
cat x.txt | tr -s " "//使用tr压缩空格使其变的规则

cat x.txt | tr -s " " "-" //如果指定SET2,假如替换为"-"
tr -d   ///是删除指定的符号
tr -c SET1 S  //ET2是将标准输入按照SET1求补集
[root@xuexi tmp]# echo "one ONE 1 two TWO 2 three THREE 3" | tr -d -c "[:upper:] \n" ONE TWO THREE 
[root@xuexi tmp]# echo "one ONE 1 two TWO 2 three THREE 3" | tr -d -c "[:alpha:] \n" one ONE two TWO
 three THREE [root@xuexi tmp]# echo "one ONE 1 two TWO 2 three THREE 3" | tr -d -c "[:digit:] \n" 
 1 2 3

四 cut

cut是一个选取命令,就是将一段数据经过分析,取出我们想要的。一般来说,选取信息通常是针对“”来进行分析的,并不是整篇信息分析的。

4.1 其语法格式为
cut  [-bn] [file]  cut [-c] [file]    cut [-df] [file]
4.2 主要选项
选项说明
-b以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志
-c以字符为单位进行分割
-d自定义分隔符,默认为制表符
-f与-d一起使用,指定显示哪个区域
-n取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的
范围之内,该字符将被写出;否则,该字符将被排除。
4.3 cut一般以什么为依据呢?
  1. 也就是说,我怎么告诉cut我想定位到的剪切内容呢 ?
  2. cut命令主要是接受三个定位方法:
    第一:字节(bytes),用选项 -b
    第二:字符(characters),用选项 -c
    第三:域(fields),用选项 -f
4.4 以“字节”定位
  1. 举个例子吧,当你执行ps命令时,会输出类似如下的内容
[root@localhost ~]# who
liangxufei :0           2021-05-27 16:47 (:0)
liangxufei pts/0        2021-05-27 16:48 (:0)
liangxufei pts/1        2021-06-11 10:55 (:0)
root     pts/3        2021-06-14 16:12 (192.168.132.1)
  1. 如果我们想提取每一行的第3个字节,就这样:
[root@localhost ~]# who|cut -b 3
a
a
a
o
4.5 如果“字节”定位中,我想提取第3,第4、第5和第8个字节,怎么办?
  1. -b支持形如3-5的写法,而且多个定位之间用逗号隔开就成了.
    示例
[root@localhost ~]# who|cut -b 3-5,8
angf
angf
angf
ot  
  1. 但有一点要注意,cut命令如果使用了-b选项,那么执行此命令时,cut会先把-b后面所有的定位进行从小到大排序,然后再提取。
[root@localhost ~]# who|cut -b 8,3-5
angf
angf
angf
ot  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值