日期:2014-05-16  浏览次数:20809 次

linux文件搜索查找命令
1、grep

功能描述
grep 命令在一个或多个文件中查找与指定模式匹配的字符串。如果模式里包含有空格,必须用引号括起来。grep的模式只能是一个被引号括起来的字符串或者是一个单词,后面紧跟着的参数都被当作文件名。grep命令把结果输出到标准输出上,并不改变被搜索的源文件。

命令格式
grep pattern filename filename2 ...

grep有几个选项比较常用的
-i    查找时忽略大小写进行比较
-n    显示找到的行在文件中的行号
-v    显示不匹配的行

例1:在/etc/passwd文件中查找包含"bugboy"的行
[bugboy@bugboy ~]$ grep bugboy /etc/passwd
bugboy:x:500:500:YanDingcheng:/home/bugboy:/bin/bash

grep在/etc/passwd文件中查找含有bugboy的每一行,如果找到就把该行输出到标准输出上,grep的退出状态
为0;如果没找到,grep将不会输出任何信息,退出状态为1;如果指定的文件不存在,grep的退出状态为2。

grep模式支持正则表达式,下面是一些常用的正则表达式匹配元字符。

^      行起始锚定符,例如'^love',匹配所有以love开始的行。
$     行结束锚定符,例如'love$',匹配所有以love结束的行。
.      匹配任意一个字符, 例如'l..e',匹配所有以"l"开头,紧跟两个字符,然后以"e"结尾的字符串。
*     匹配0个或多个任意字符,例如' *bug',匹配以任意多个空格开始,后跟"bug"的字符串。
[]     匹配字符集中的一个字符,例如'[Bb]ook',匹配Book或book。
[^]   匹配不在字符集中的一个字符,例如'[^A-Z]low',匹配所有不以大写字母开头,后跟"low"的字符串。
/<   单词超始锚定符,例如'/<go',匹配所有以"go"开头的单词。
/>   单词结束锚定符,例如'or/>',匹配所有以"or"结束的单词。
x/{m/}    匹配m个x,例如'o/{5}',匹配5个o,即"ooooo"。
x/{m,/}   匹配至少m个x,例如'o/{5,/},匹配至少5个o,即"ooooo","oooooo"等。
x/{m,n/} 匹配m到n个x,例如'o/{2,5/}',匹配2到5个为,即"oo","ooo","oooo","ooooo"。

例2:在/etc/passwd中查找用户名以"b"开头的用户
[bugboy@bugboy test]$ grep ^b /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
bugboy:x:500:500:YanDingcheng:/home/bugboy:/bin/bash

例3:在/etc/passwd中查找SHELL为bash的用户
[bugboy@bugboy test]$ grep bash$ /etc/passwd
root:x:0:0:root:/root:/bin/bash
ftp:x:14:50:FTP User:/var/ftp:/bin/bash
netdump:x:34:34:Network Crash Dump user:/var/crash:/bin/bash
pvm:x:24:24::/usr/share/pvm3:/bin/bash
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
bugboy:x:500:500:YanDingcheng:/home/bugboy:/bin/bash

例3:在/etc/passwd中查找含有"00"的行
[bugboy@bugboy test]$ grep '0/{2/}' /etc/passwd
games:x:12:100:games:/usr/games:/sbin/nologin
bugboy:x:500:500:YanDingcheng:/home/bugboy:/bin/bash

例4:查找sscanf.c文件中的非空行
[bugboy@bugboy test]$ cat sscanf.c
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    const char *str = "I am bugboy";
    char mystr[256];

    sscanf(str, "%s", mystr);
    printf("1: %s/n", mystr);

    char key[64], value[64];
    sscanf(str, "%s %s", key, value);

    printf("key: %s, value: %s/n", key, value);

    return 0;
}
[bugboy@bugboy test]$ grep -v '^ *$' sscanf.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
    const char *str = "I am bugboy";
    char mystr[256];
    sscanf(str, "%s", mystr);
    printf("1: %s/n", mystr);
    char key[64], value[64];
    sscanf(str, "%s %s", key, value);
    printf("key: %s, value: %s/n", key, value);
    return 0;
}

例5:查找sscanf.c文件中含有"const char"的行,注意,如果要查找的字符串不只一个单词,要用引号括起来。
[bugboy@bugboy test]$ grep "const char" sscanf.c
    const char *str = "I am bugboy";
  
2、find

功能描述
find命令在文件系统中查找文件

命令格式
find  [path ...] [option] [-exec | -ok | -print]

find 命令的参数
path    find命令所查找的目录路径。
-exec   find命令对查找到的每一个匹配文件执行一个shell命令,命令格式为 "-exec command {} /;",