Global Regular Expression Print,表示全局正则表达式版本。grep 命令用于查找文件里符合条件的字符串的一列。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。
1、查找时不区分字符串的大小写
grep -i ${“查找的字符串”文件名}
2、查找时使用正则表达式,匹配符合的字符串
grep -e ${“正则表达式”文件名}
3、查找不匹配指定字符串的行:
grep -v ${“被查找的字符串”文件名}
4、查找时显示被查找字符串所在的行数
grep -n ${“查找的字符串”文件名}
5、其他
-q 或 --quiet或--silent : 不显示任何信息。
-w 或 --word-regexp : 只显示全字符合的列。
5、其他
-c <显示符合条件的个数>
-C <显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
-d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
-r <递归查询目录>
-f <规则文件> --file=<规则文件> #指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
用于在文件树中(目录结构下)查找文件,并作出相应的处理 。
-amin n 查找系统中最后N分钟访问的文件
-atime n 查找系统中最后n*24小时访问的文件
-cmin n 查找系统中最后N分钟被改变文件状态的文件
-ctime n 查找系统中最后n*24小时被改变文件状态的文件
-mmin n 查找系统中最后N分钟被改变文件数据的文件
-mtime n 查找系统中最后n*24小时被改变文件数据的文件
# 在当前目录查找以.log结尾的普通文件,并排序
find . -type f -name "*.log" | sort
# 查找opt下查找权限为777,大小大于1K的文件
find /opt/ -size +1000c -perm 777
find命令将所有匹配到的文件,以{}
表示,一起传递给exec执行。
-exec
参数后面跟的是command命令,它的终止是以;
为结束标志的,考虑到各个系统中分号会有不同的意义,前面加反斜杠\
。
find . -type f -mtime +14 -exec rm {} \;
在shell中用任何方式删除文件之前,应当先查看相应的文件,建议使用-exec
的安全模式-ok
。
find . -name "*.log" -exec mv {} /home/logs \;
find /etc -name "account*" -exec grep "username" {} \;
查找文件名包含“account”中,匹配“root”字段的行。
有些系统对能够传递给exec的命令长度有限制,容易出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。使用 -exec 选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行,效率不高。 而使用 xargs 命令则只有一个进程,是否分批获取参数视情况而定。
# 显示为:
# ./log2013.log: empty
# ./log2012.log: ASCII text
find . -type f | xargs file
find / -name "core" -print | xargs echo "" >/tmp/core.log
find . -perm -7 -print | xargs chmod o-w
awk工作流程是这样的:读入有’\n’换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,0则表示所有域,1表示第一个域,n表示第n个域。NF 表示的是浏览记录的域的个数,NF 表示的最后一个Field(列),即输出最后一个字段的内容默认域分隔符是"空白键" 或 “[tab]键”。
# 查找/opt/app/conf中properties文件格式的文件名,去掉前面的路径,只保留文件名
find /opt/app/conf -name "*.properties"|awk -F "/" '{print $NF}'