find命令
find命令用于查找文件,可以按照文件类型,文件名称,文件大小,修改日期等条件进行查找,功能非常强大。
格式: find [目录] [条件]
常用条件示例:
- type 类型(f文件,d目录,l快捷方式(链接),)
- name 文档名称
- size 文件大小(k,M,G)(+:大于;-:小于)
- user 用户名
- mtime 文件修改时间
常用命令如下;
#-type 类型
find /opt -type d
#-name 文档名称
find /etc -name "passwd"
find /etc -name "*.conf"
#-size 文档大小
find /boot/ -size +10M -size -50M
#-user 用户名 (按照数据的所有者)
find / -user zhangsan
#-mtime 修改时间
find /root -mtime +90 # 三个月前的数据
find高级用法(exec添加额外处理命令)
find [范围] [条件] -exec 处理命令 {} \;
-exec额外操作的开始
{} 永远表示前面find查找的结果
\; 额外操作的结束
find /boot -size +10M -exec cp {} /mnt \;
#将查找到的大于10M的文件拷贝到/mnt目录下
1.grep
作用:在文本文件内容中,过滤包含指定字符串的行
格式: grep [选项] '字符串' 文本文件
常用命令选项:
-v:取反匹配
-i:忽略大小写
此外,在写需要过滤的字符串条件时,^word表示以字符串word开头,$word表示以字符串word结尾。^$组合起来表示空行。
示例:
grep -v ^$ /etc/default/useradd
#输出的内容将不包含空行
2.sed流式编辑器
作用:对文档进行非交互式增删改查,逐行处理。
用法:
- 前置指令 | sed 选项 条件 指令
- sed 选项 条件 指令 被处理文档
选项 - -n 屏蔽默认输出
- -r 支持扩展正则
- -i 修改源文件
指令 - p 输出(打印)
- d 删除
- s 替换
- a 行下追加
- i 行上添加
c 整行替换
特殊符号说明:
$:代表最后一行
=:表示行号
$=:最后一行的行号
示例:sed -n '2,4p' user //输出2~4行 sed -n '2p;4p' user //输出第2行与第4行 sed -n '3,+1p' user //输出第3行以及后面1行 sed -nr '/^root|^bin/p' user //输出以root或bin开头的行,|是扩展正则,需要r选项 sed -n '1!p' user //输出除了第1行的内容,!是取反 sed -n '$p' user //输出最后一行 sed -n '=' user //输出行号,如果是$=就是最后一行的行号 sed -n '$=' user //输出最后一行的行号
sed '3,5d' abc.txt #删除第3~5行 sed '/xml/d' abc.txt #删除所有包含xml的行 sed '/xml/!d' abc.txt #删除不包含xml的行 sed '/^install/d' abc.txt #删除以install开头的行 sed '$d' abc.txt #删除文件的最后一行 sed '/^$/d' abc.txt #删除所有空行
sed 's/2017/6666/' shu.txt //把所有行的第1个2017替换成6666 sed 's/2017/6666/2' shu.txt //把所有行的第2个2017替换成6666 sed '1s/2017/6666/' shu.txt //把第1行的第1个2017替换成6666 sed '3s/2017/6666/3' shu.txt //把第3行的第3个2017替换成6666 sed 's/2017/6666/g' shu.txt //所有行的所有个2017都替换 sed '/2024/s/2017/6666/g' shu.txt //找含有2024的行,将里面的所有2017替换成6666 #把 /bin/bash 替换成 /sbin/sh sed 's!/bin/bash!/sbin/sh!' user //最佳方案,更改s的替换符
sed 'a 666' user //所有行的下面追加666 sed '1a 666' user //第1行的下面追加666 sed '/^bin/a 666' user //在以bin开头的行的下面追加666 sed 'i 666' user //所有行的上面添加666 sed '5i 666' user //第5行的上面添加666 sed '$i 666' user //最后1行的上面添加666 sed 'c 666' user //所有行都替换成666 sed '1c 666' user //替换第1行为666
3.awk
作用:可以实现精确搜索并输出 ,逐行处理
用法:
- 前置指令 | awk 选项 条件 指令
- awk 选项 条件 指令 被处理文档
选项
-F:定义分隔符
指令
print:打印
条件
/字符串/
内置变量
$1 第一列 $2 第二列 $3 第三列
$0 所有列 NR 行号 NF 列号
示例:
awk '/to/{print}' abc.txt //输出有to的那行
awk '/to/{print $1}' abc.txt //输出有to的那行的第1列
awk '{print $0}' abc.txt //输出所有行所有列
awk '{print NR,NF}' abc.txt //输出所有行的行号,列号(有几列)
awk '/^bin/{print NR,$0}' user //找以bin开头的行,显示该行的行号,改行所有列
awk -F: '$6~/root/{print}' user //输出第6列包含root的行
awk -F: '$6!~/bin/{print}' user //输出第6列不包含bin的行
awk -F: '$3<=3{print}' user //输出第3列小于等于3的行
awk -F: 'NR>2{print}' user //输出行号大于2的行
awk -F: 'NR==2||NR==4{print}' user //找行号是2或者4的行
如果只有一个条件满足就显示一个
awk -F: '$7~/bash/&&$3<=500{print}' user //找第7列包含bash并且第3列
小于等于500的行
任务就是{print}的话可以省略不写
awk -F: '$1=="root"' user //找第1列完全等于root的行多一个字符少一个字符都不行,比较严格的搜索方式
运算
awk 'NR%2==0{print NR,$0}' user //在条件中使用运算,找到将行号除以2余数等于0的行,然后输出该行的行号和所有列,相当于输出偶数行
awk处理时机,可以执行额外任务
BEGIN任务 执行1次,读取文档之前执行
逐行任务 执行n次,读取文档时执行
END任务 执行1次,读取文档之后执行
awk -F: 'BEGIN{print "ok"}{print $1}END{print "ok"}' user
awk -F: 'BEGIN{print "User\tUID\tHome"}{print $1"\t"$3"\t"$6}END{print "总计"NR"行"}' user
awk数组
awk '{ip[$1]++}END{for(i in ip){print i,ip[i]}}' /var/log/httpd/access_log | sort -nr -k 2
//使用sort命令增加排序功能,-n是以数字形式排序,-r是降序, -k是指定为第几列排序
评论