cut
- cut 命令多用于字符截取
cut -d | 指定分隔符 |
---|---|
cut -f | 指定截取的列 |
cut -c | 指定截取的字符位置 |
举例:
cp /etc/passwd /mnt
cd /mnt
cut -d : -f 1 passwd 分隔符:的第一列
cut -d : -f 1,3 passwd 第1,3列
cut -d : -f 1-3 passwd 第1-3列
cut -c 2-4 passwd 第2-4个字符
cut -c 2,5 passwd 第2,第5个字符
sort
- 多用于字符排序
sort -n | 纯数字排序 |
---|---|
sort -r | 倒序 |
sort -u | 去掉重复数字 |
sort -o | 输出到指定文件中 |
sort -t | 指定分隔符 |
sort -k | 指定要排序的列 |
举例:
给文件test里随意添加数字
sort test ##比较第一个字符的大小,并排序
sort -n test ##排序
sort -nr test ##倒序
sort -nru test ##倒序并且去掉重复数字
sort -nru test -o westos ##把结果输入到文件里westos
cat westos
给test中加入分隔符:和数字
sort -n test 按照第一个数字排序
sort -t : k 2 -n test 指定分隔符,并按照分隔符后的数字排序
去掉分隔符和数字
sort -nu test 去掉重复的,u=uniqe
uniq
- 对重复字符做相应的处理
uniq -u | 显示唯一的行 |
---|---|
uniq -d | 显示重复的行 |
uniq -c | 每行显示一次并统计重复次数 |
举例:
sort -n test | uniq -c ##排序,并在前面统计每个数出现的次数
sort -n test | uniq -d ##显示有重复的行的值
sort -n test | uniq -u ##显示没有重复,唯一的行的值
测试
抓取登陆过你的主机的ip,并显示出登陆次数最多的那个。
last -i查看
grep -v 反向过滤
grep -E 扩展的grep
man grep
几种方法:
1
last -i | grep 0.0.0.0 -v | cut -d " " -f 14 | uniq -c | sort -nr -t " " -k 5 | head -n 1
含义:显示ip,过滤0.0.0.0的行,取第14个字符开始的ip列,统计每个ip出现的次数,反向排序,取最高的值也就是第一行
2
last -i | grep 0.0.0.0 -v | cut -d " " -f 14 | uniq -c | sort -nr | head -n 1
不用取消分隔符也可以
3
last -i | grep 0.0.0.0 -v | grep wtmp -v | cut -d " " -f 14 | uniq -c | sort -rn | head -n 1
如果有wtmp列,将他反向过滤掉:
4
利用awk和扩展的grep:grep -E
grep -E 可以实现多模式匹配,同时过滤0.0.0.0和wtmp的行,awk'{print $3}' 取第三列:
last -i | grep -E "0.0.0.0|wtmp " -v | awk '{print $3}'
最终语句:
last -i | grep -E "0.0.0.0|wtmp " -v | awk '{print $3}' | uniq -c |sort -nr | head -n 1
&&和||
- && 条件为真,|| 条加为假
测试
编写一个脚本,测试网络是否通畅(ping ip能否ping通)。
-w wait 等待时间 不通的话时间会很长
-c count 次数
-e 颜色的设定
0m 关掉颜色的设定属性
- 没有颜色的版本:
vim ping.sh
#!/bin/bash
ping -c 1 -w 1 $1 &> /dev/null && echo "$1 is up" || echo "$1" is down
chmod +x ping.sh
执行结果:
- 有颜色的版本:
#!/bin/bash
ping -c 1 -w 1 $1 &> /dev/null && {
echo -e "\033[32m$1 is up\033[0m" 32是绿
}||{
echo -e "\033[31m$1 is down\033[0m" 31是红
}
执行结果: