find查找命令
用的最多的是删除以前的日志,比如三个月前的,还有就是查找文件名
按文件和目录:find /root/ -type f(文件) -type d(目录)
针对文件名字搜索:find /root/ -name "*.txt" 搜下面有txt的文件
按创建时间:find /root/ -mtime +1(一天以前) -1(一天以内)+5(五天以前) -5(五天以内)
find /etc/ -type d -name "*.txt" 目录
find /etc/ -type f -name "*.txt*" 文件
find /root/ -type f -mmin -60 60分钟内的文件
find /root/ -type f -mmin -200 200分钟内的文件
find /root/ -type f -size -10k -exec ls -lh {} \; 列出root目录小于10k的文件
find /root/ -type f -mmin -200 -exec mv {} {}.bak \; 200分钟以内的文件后缀加.bak
grep打印过滤
grep '[0-9]' /etc/inittab 过滤出所有包含数字的行
grep -A2(xxx及下面两行) -B2(xxx及上面两行) -C2(上下各两行) 'xxx' /root/
grep -c 显示行数
grep -n 显示行号(用的多打个call)
grep -v 取反 grep -v '[0-9]' /etc/inittab 过滤出所有不包含数字的行
grep -E 扩展选项可加入管道符 grep -E -n 'abc|123' 123.txt
细节注意:
grep '^[a-zA-Z]' test.txt 括号以外表示以a-zA-Z为首字母的行
grep '[^a-zA-Z]' test.txt 括号内表示出了a-zA-Z之外的行
几个实例:
grep -v '^#' /etc/crontab |grep -v '^$' 去除所有空行和以 ‘#’ 开头的行
grep -v '^#' /etc/inittab 把所有以 ‘#’ 开头的行去除
在正则表达式中, “^” 表示行的开始, “$” 表示行的结尾,那么空行则可以用 “^$” 表示
. 表示任意一个字符(grep)
*表示零个或多个前面的字符(grep)
+筛选一个或一个以上前面的字符(egrep)
?筛选零个或一个前面的字符(egrep)
sed打印过滤
-n :只打印模式匹配的行
-e :直接在命令行模式上进行sed动作编辑,此为默认选项
-f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作
-r :支持扩展表达式
-i :直接修改文件内容
sed -n '5'p 123.txt 打印第五行
sed -n '1,5'p 123.txt 打印1到5行
sed -n '1,$'p 123.txt 打印1到尾行
sed -n '/^1/'p 123.txt 打印首字母为1的行
sed -n '/sd$/'p 123.txt 打印sd结尾的行
sed -e '1'p -e '/root/'p -n 123.txt 多个选项同时匹配,结尾注意加-n否则重复内容
sed -n -r '/o+t/'p 123.txt 打印-r支持扩展表达式的+
sed -nr '/o{2}/'p 123.txt 打印两个o或以上的行
下面进入删除区域:
sed ‘1’d test.txt 删除文件第一行 d是删除(实际上只是不显示)
sed ‘1,3’d test.txt 删除1到3行(实际上只是不显示)
sed ‘/oot/’d test.txt 删除包含oot的行(实际上只是不显示)
sed ‘1,2s/ot/to/g’ test.txt 将1-2行的ot更换成to(s是替换 g是全局替换)
sed ‘s/[0-9]//g’ test.txt 删除全部的数字(实际上只是不显示)
sed ‘s/[a-zA-Z]//g’ test.txt 删除全部的英文字母
sed -r 's/(rot)(.*)(bash)/\3\2\1/' test.txt 把三段顺序颠倒打印出来
sed ‘s/^.*$/123&/’ test.txt 这个是给所有行前面加上123
awk三剑客之油嘴滑舌花里胡哨小飞侠
awk -F ':' '{print $1}' 打印第一段
awk -F指定分隔符 $0打印所有 $1第一段 $2,$3,$7打印237段
awk -F ':' '$1~/oo/' 888.txt 匹配第一段有oo的行
awk -F ':' '$7!="/sbin/nologin"' /etc/passwd
!= 为不匹配,除了针对某一个段的字符进行逻辑比较外,还可以两个段之间进行逻辑比较
awk -F ':' '$3<$4' /etc/passwd 第三段数字小于第四段的打印出来
head -n3 /etc/passwd | awk -F ':' '{print NF}' NF是分割成多少段
head -n3 /etc/passwd | awk -F ':' '{print $NF}' $NF是最后一段的值
head -n3 /etc/passwd | awk -F ':' '{print NR}' NR是行数
awk -F ':' 'NR>20 && $1 ~ /ssh/' /etc/passwd 行数大于20并且第一段有ssh的段打印出来
head -n2 /etc/passwd |awk -F ':' '{$7=$3+$4; print $0}' 第七段等于第三四段相加,打印全局