1.tr
tr命令是一个文本处理工具,跟正则表达式,字符串。有替换,压缩,删除的功能。
-s压缩
-d删除
命令1:tr a b。将出现的a替换成b。
输入---aaa---bdd---
输出---bbb---bdd---
命令:tr -d [字符1字符2...字符n]
遇到指定的字符就删除,例:
-s压缩,遇到连续的指定的字符就压缩成1个字符,例如:tr -s 1 输入1111就输出1,必须是连续的1才会压缩成一个1,如过是1092109不会压缩。
tr还可以将小写字母替换成大写字母:cat /etc/issur | tr '[a-z]' '[A-Z]'
2.cut
cut是切列操作。
-d,指定分割符,指明空格就是-d" "
-f1,取第几列,取第1列。-f1,3取第1和3列。-f2-4取第2到4列
-c按照字符取列
例题:取/etc/passwd文件中用户的用户和属主一列
可以看到用户在第1列,属主在第5列。命令:cut -d: -f1,5
-d选项不能将连续的字符当做分割符,假设有三个空格,只能把第一个空格当做分割符。此时把多个空格利用tr压缩。
例如:我们要磁盘的使用率
先过滤出sda1的行,再压缩空格,再取第5列
df | grep sda1 | tr -s " " | cut -d" " -f5
如果进一步优化,去掉百分号,可以再加一个管道,把%删除掉。
命令:df | grep sda1 | tr -s " " | cut -d" " -f5 | tr -d %
-c是取列:一个字符就是一列,df | grep /dev/sda1 | cut -c 54取第54列
3.sort
sort排序:
-n,按照真实的数字排序,默认从小到大
-r反向排序。
比如/etc/passwd文件,按照第三列UID排序。先取第三列,在排序。
cat /etc/passwd | cut -d: -f3 | sort -k1
这样的排序是先取第一个字符,0,1,2,3...第二个字符也按照0,1,2,3...。
要使按照数字排序用-n
cat /etc/passwd | cut -d: -f3 | sort -n就可以了。
由大到小排序用户UID:cat /etc/passwd | cut -d: -f3 | sort -nr,倒序排列
4.uniq
-u 只显示不重复的行。
-c显示重复的行出现的行数的个数
去重,只能将连续的重去掉。对连续的行去重。比如:
去重前:
111111
111111
22222
111111
333333
去重后:
111111
22222
111111
333333
cat a | uniq -c一个行出现的次数
cat a | uniq -u统计出不重复的行
总结:通常这四个命令搭配使用。当前目录下有一个文件access_log,要求找出地址出现次数最多的十个
思路:
cat access_log查看该文件。
取第一列IP地址。
排序(目的是让相同的IP地址在连续的行)。
把相同的行去重并统计出现的次数。
排序(倒序,按照从大到小对次数排列,默认就是第一行)。
取前十行
命令:cat access_log | cut -d" " -f1 | sort -n | uniq -c | sort -nr | head -10
5.seq
打印输出,默认是换行
-s指定分割符,
seq -s + 10
例如求前10的和
bc是求和
seq -s + 10 | bc
-end-