一、grep
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查找符合规则条件的文件内容,格式为每行一个规则样式。
二、find
2.1 基本用法
用于在文件树中(目录结构下)查找文件,并作出相应的处理 。
-
命令参数
pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ { } ;,注意{ }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。 -
命令选项
-name 按照文件名查找文件。
-perm 按照文件权限来查找文件。
-mtime -n +n 按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。
-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
-type 查找某一类型的文件,诸如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。
-fstype,- aount,- follow在文件系统、挂载点、链接文件中查询。 -
时间
atime(access time):在读取文件或者执行文件时更改,即文件最后一次被读取或执行的时间。
mtime(modify time):在写入文件时随文件内容的更改而更改,是指文件内容最后一次被修改的时间。
ctime(change time):在写入文件、更改所有者、权限或链接设置时随 Inode 的内容更改而更改,即文件状态(属性)最后一次被改变的时间。
-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
2.2 -exec 命令选项
find命令将所有匹配到的文件,以{}
表示,一起传递给exec执行。
-exec
参数后面跟的是command命令,它的终止是以;
为结束标志的,考虑到各个系统中分号会有不同的意义,前面加反斜杠\
。
- 示例
- 在目录中查找更改时间在n日以前的文件并删除它们
find . -type f -mtime +14 -exec rm {} \;
在shell中用任何方式删除文件之前,应当先查看相应的文件,建议使用-exec
的安全模式-ok
。
- 查找文件移动到指定目录
find . -name "*.log" -exec mv {} /home/logs \;
- -exec中使用grep命令
find /etc -name "account*" -exec grep "username" {} \;
查找文件名包含“account”中,匹配“root”字段的行。
2.3 配合 xargs 命令
有些系统对能够传递给exec的命令长度有限制,容易出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。使用 -exec 选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行,效率不高。
而使用 xargs 命令则只有一个进程,是否分批获取参数视情况而定。
- 查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件
# 显示为:
# ./log2013.log: empty
# ./log2012.log: ASCII text
find . -type f | xargs file
- 在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中
find / -name "core" -print | xargs echo "" >/tmp/core.log
- 在当前目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限·
find . -perm -7 -print | xargs chmod o-w
三、awk
awk工作流程是这样的:读入有’\n’换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0
则表示所有域,$1
表示第一个域,$n
表示第n个域。NF
表示的是浏览记录的域的个数,$NF
表示的最后一个Field(列),即输出最后一个字段的内容默认域分隔符是"空白键" 或 “[tab]键”。
# 查找/opt/app/conf中properties文件格式的文件名,去掉前面的路径,只保留文件名
find /opt/app/conf -name "*.properties"|awk -F "/" '{print $NF}'