sort指令
sort [选项] 参数
cat file | sort 选项
以行为单位对文件内容进行排序,也能够依据不同的数据类型来排序比较原则是从首字符向后,依次按AscII码值进行比较,最后将他们按升序输出。
常用选项
选项 | 效果 |
---|---|
-n | 按照数字进行排序 |
-r | 反向排序 |
-u | 等同于uniq,表示相同的数据仅显现一行 |
-t | 指定字段分隔符,默许运用[Tab]键分隔 |
-k | 指定排序字段 |
-o<输出文件> | 将排序后的成果转存至指定文件 |
-f | 疏忽大小写,会将小写字母都转换为大写字母来进行比较 |
-b | 疏忽每行前面的空格 |
-
按数字进行排序
-
反向排序
-
相同的数据仅显现一行
-
指定分隔符和指定排序字段
-
排序后的成果转存至指定文件
效果和重定向输出类似,重定向输出只能输入静态的内容
-
疏忽大小写
用处举例:筛选du计算占用状况
uniq指令
uniq [选项] 参数
cat file | uniq [选项]
用于疏忽文件中连续的重复行,通常与sort指令结合运用。(去重)
常用选项
选项 | 效果 |
---|---|
-c | 进行计数,并删去文件中重复呈现的行 |
-d | 仅显现连续的重复行 |
-u | 仅显现呈现一次的行 |
-
计算重复次数
-
仅显现连续重复行和仅显现呈现一次的行
用处举例:可用于监测用户登录次数
脚本内容
#!/bin/bash
#监测用户登录
grep 'Failed password' /var/log/secure | awk '{print $11}' | sort -n | uniq -c > IPS.txt
OLD_IFS=$IFS
IFS=$'\n'
for i in $(cat IPS.txt)
do
num=$(echo $i | awk '{print $1}')
ip=$(echo $i | awk '{print $2}')
if [ $num -gt 3 ];then
echo "sshd:$ip" >> /etc/hosts.deny
fi
done
IFS=$OLD_IFS
rm -f IPS.txt
解析
-
筛选出对应的IP地址并计算次数
-
筛选出相应的数据赋给变量,并对登录次数进行判别
tr指令
tr [选项] 参数1 参数2
常用来对来自标准输入的字符进行替换、紧缩和删去
常用选项
选项 | 效果 |
---|---|
-c | 保存字符集1的字符,其他的字符(包括换行符\n)用字符集2替换 |
-d | 删去一切归于字符集1的字符 |
-s | 将重复呈现的字符串紧缩为一个字符;用字符集2替换字符集1 |
-t | 字符集2替换字符集1,不加选项同成果 |
-
字符集2替换字符集1
符号也能够替换
字符集1和字符集2具有对应联系
-
保存字符集1的字符,其他的字符用字符集2替换
换行符\n也会被替换
-
删去一切归于字符集的字符
-
紧缩并替换
删去空行
运用grep
运用tr -s
弥补:删去windows文件“形成”的’^M’字符
Windows中编写的脚本文件移动到Linux中会多“^M”字符。
原因
- Linux中遇到换行符(“\n”)会进行回车+换行的操作,回车符反而只会作为控制字符(“^M”)显现,不发生回车的操作。
- windows中要回车符+换行符(“\r\n”)才会回车+换行,缺少一个控制符或者顺序不对都不能正确的另起一行。
删去^M的办法
-
办法一:利用tr删去
-
办法二:装置dos2unix,运用dos2unix删去
弥补:运用sort和tr排序数组
cut指令
cut 参数
cut file | cut 选项
显现行中的指定部分,删去文件中指定字段。
常用选项
选项 | 效果 |
---|---|
-f | 经过指定哪一个字段进行提取。cut指令运用”TAB”作为默许的字段分隔符。 |
-d | “TAB”是默许的分隔符,运用此选项能够更改为其他的分隔符。 |
-b | 截取字符串 |
–complement | 此选项用于扫除所指定的字段。 |
–output-delimiter | 更改输出内容的分隔符。 |
-
指定提取哪一字段,指定分隔符
-
截取字符串
-
echo直接截取
-
cut -b
-
expr substr 变量名 第几个字符开端 截取长度
-
-
用于扫除所指定的字段
-
更改输出内容的分隔符
split指令
split 选项 参数 原始文件 拆分后文件名前缀
可将将一个大的文件拆分成若干小文件
常用选项
选项 | 效果 |
---|---|
-l | 以行数拆分 |
-b | 以大小拆分 |
paste指令
paste [-s] [-d<距离字符>] 文件..
用于兼并文件的列
一般的兼并,经过重定向追加,或者将两个文件重定向输出到第三个文件即可完结。
常用选项
选项 | 效果 |
---|---|
-d <距离字符> | 用指定的距离字符替代制表符 |
-s | 把多行内容兼并为一行进行显现 |
-
用指定的距离字符替代制表符
-
多行内容兼并为一行进行显现
-
组合运用
将文件1的第2列和文件2的第3列兼并
- 将两个文件的对应列分别导出到另一个文件,然后再运用paste兼并。
eval指令
指令字前加上eval时,shell会在履行指令之前扫描它两次。eval指令将首先会先扫描指令行进行一切的置换,然后再履行该指令。该指令适用于那些一次扫描无法实现其功能的变量。该指令对变量进行两次扫描。
即先解析指令中的变量,再履行解析后的指令。
结合脚本运用