Linux学习之——查找和筛选

来源:互联网 发布:淘宝模特去哪里找 编辑:程序博客网 时间:2024/06/10 15:38

一、查找文件

1、概况

find:从指定位置进行遍历查找,也就是对文件和目录进行逐一查找。另外,可以查找具有某一类特征的文件(如指定某个权限特征的文件)。非常适合处理具有某一个特征的批量文件。

格式:

find【path】  【expression】

expression是查找表达式,包含选项、测试和动作3类。

选项:

  • help  : 帮助信息
  • depth: 查找当前目录后再查找子目录
  • maxdepth LEVEL: 设置向下搜索到第LEVEL层目录,0表示只搜索当前目录
  • mindepth LEVEL: 至少向下搜索LEVEL层目录
  • mount : 不搜索远程文件系统
  • follow:搜索如果遇到链接文件就连同链接所指向的文件一起搜索
测试:
  • name :按文件名查找
  • perm : 按文件权限查找
  • type:查找某一类型的文件
  • mtime + n - n : 按文件修改时间查找,+n表示修改时间距离现在n天前,-n表示距离现在n天以内
  • atime + n - n : 按文件访问时间查找
  • size n(c):查找文件长度为n块的文件,c表示文件大小n字节的文件
  • user:按照文件属主查找
  • group:安装文件属组查找
  • nouser:查找没有有效属主的文件
  • nogroup:查找没有有效属组的文件
动作参数:
  • prune:不在指定目录中查找
  • print:将查找到的文件输出到标准输出
  • exec:对查找到的文件执行exec后附带的shell命令
  • ok:对查找到的文件执行ok后附带的shell命令,每次执行前将提示用户是否执行

2、查找实例

  • 按文件名查找
 find  /etc/   -name   "smb.conf"   -print &
在一个很大的文件系统中查找文件可能耗时很长,建议在末尾加上&放到后天运行。
  • 按文件权限查找
find /  -perm  -007  -print #查找包含其他用户可读、可写、可执行的文件,-007表示包含,007则表示等于
  • 按文件类型查找
find  ./file   -type  c -print
  • 按文件时间戳和大小查找
find  /  -mtime -7  -print
find  .  -size +10000000c -print #查找大于10M的文件find .  -size  -30  -print #查找文件小于30块的文件
  • 按文件属主属组查找
find /  -nouser -printfind /  -group  admin  -print
  • 其他
find  ./backup -name  "msg"  -mtime +7 -exec ls -l {} \;

二、文本查找

1、概况

grep(global regular expression print):在文件中查找与字符串pattern相关的内容,如果找到就输出到标准输出。
格式:  gerp  【option】   pattern   【file】
option:
  • i : 忽略大小写
  • n :输出结果时输出行号
  • s:没有查找到内容时不显示错误信息
  • l:从多个文件中查找,只输出找到文件内容的文件名
  • h:从多个文件中查找,只输出匹配内容,不显示文件名
  • c:输出匹配内容的总行数
  • v:反转查找,输出匹配内容以外的行
工作过程:以行为查找单位,从文本第一行读入缓冲区并执行查找,如果找到就输出整行,否则就丢弃缓冲区内容并读入下一行继续查找,只到文本结束。

2、配合正则表达式

  • 行首行尾匹配:  ‘^......02’       ‘[a-z]$’
  • 次数: ‘c\{3,\}’ 至少出现3次
  • 使用或与: ‘x|y’          grep  -in  'a'  students | grep -ln  'b'  students

3、应用

精简配置文件
cd  /etc/sambamv sam.conf  smb.conf_backupcat smb.conf_backup  |  grep  -v  '#'  |  grep -v  '^;'  | grep -v  '^$'  >  smb.conf

从系统管理命令中查找输出
chkconfig   --list  |  grep  bluetooth

三、格式化文本数据抽取工具

格式化文本一般使用某个特定的字符(一般为tab)将文本中不同字段隔开,awk正是处理这种格式化的文本数据,因发明这个命令的三个作者的名字的首字母分别是A、W、K而得名。

1、概况

格式:
awk  【-F】  ‘command’   input-file             awk  -f  script   input-file
两种调用格式,前者使用-F选项指定域分隔符,默认为空格。第二种使用-f选项调用,将处理命令放在一个脚本文件中调用。
每一行为一条记录,按照域分隔符分割后,每个字段按照顺序分别为域1、域2、域3等,使用”$1“、”$2“来表示。整条记录使用”$0“表示。动作一般放在模式后面的大括号内,一般是awk的内置函数。

2、使用

  • 文本头尾表达式BEGIN{......},在所有语句开始之前执行,END{.......},在所有语句结束后执行。 
  • 支持所有的算术表达式和关系操作符,还有正则表达 ”~/pattern/“  、 "!~/pattern/"
awk -F: '$1 !~/root/{print $1"\t"$4}' /etc/passwd
  • 流程控制
if ..else   while     do...while    for
continue     break     next      exit
实例:(统计普通文件的大小和文件夹的个数)
BEGIN{  A = 0;  count=0;}{  if($1 ~/^-/)   A += $5;  if ($1 ~/^d/) count++;}END{  print "total:" A;  print  count-2,"directories.";}
(统计ping命令的延时情况)
BEGIN{  FS="[:=]";  AVG = 0;  MAX = 0;  MIN = 0;}{   for(I = 1; I < 9; I++)   {     if (NR == 2)     {         MAX = $11;         MIN = $11;         IP_ADDR = $4;      }      if(NR>1 && NR < 6)      {          AVG += $11;          if ($11 > MAX)  MAX = $11;          if ($11 < MIN)   MIN = $11;      }      if (NR > 6) exit;      next;   }}END{   AVG = AVG/4;   print "IP address:",IP_ADDR;   print "Avg:",AVG,"ms";   print "Max:",MAX,"ms";   print "Min:",MIN,"ms"; }
  • 变量
内置变量:FILENAME (输入文件名称) 、  NF(当前正在处理记录的个数)、NR(从文本中读取记录的个数)、FNR(当前读取的记录数,读取新文件时会重置)、OFS(设置输出分割字段的字符,默认为空格)、RS(设置记录分隔符、默认为新行)、OFMT(数字的输出格式)、ENVIRON(读取环境变量)
自定义变量:通常放在BEGIN语句中进行初始化
  • 内置函数
int(x), exp(x),sqrt(x),log(x),sin(x),cos(x),atan2(x,y),rand(),system(),print,toupper(str),tolower(str),sbustr(str,start[,len]),printf(format,expr1[,exp2...]),split(str,array[,filedsep]),match(string,regexp[,array]),length(str),index(string,find),sub(regexp,replacement[,target]),gsub(regexp,replacement[,target])

0 0
原创粉丝点击