linux命令之grep命令

来源:互联网 发布:个人业务网站php源码 编辑:程序博客网 时间:2024/06/08 12:31

grep命令是一个十分强大的文本搜索命令,它全面的搜索满足正则表达式文本内容并且可


把对应的行以及行号打印出来


基本格式:

grep[选项][模式][文件或者目录]


[模式]是什么呢?模式就是要搜索的文本内容的正则表达式,当然也可以时最简单的最直接的文本。输出是什么呢,

一般的输出的是满足有所要搜索内容的所有行,但是根据[选项]内容不同,

也可以之输出文件名或者满足行数。


[选项]


-n列出所有匹配的行,输出的行带上行标


-l只输出文件名


-r递归搜索,不仅搜当前目录,还有子目录


-w匹配整个词


-v:反向选择,亦即显示出没有'搜寻字符串'内容的那一行


-i:不区分大小写


此外--color=auto可以给出满足模式的文本上色。

[例子]

接下来,赶紧上例子啦!

为了方便看,蓝色的表示模式,红色的表示结果


1.查看size.c文件中包含return或者return0的行

melody@melody-HP-Compaq-dc7900-Small-Form-Factor:~/workspace$grep-nreturnsize.c

5:return0;

melody@melody-HP-Compaq-dc7900-Small-Form-Factor:~/workspace$grep -n"return 0"size.c

5:return0;

melody@melody-HP-Compaq-dc7900-Small-Form-Factor:~/workspace$grep -nreturn 0 size.c

grep:0:没有那个文件或目录

size.c:5: return0;


注意:当模式中有空格的时候一定要打””引起来,不然会出现没有那个文件或目录的错误


2.查看目录下包含return0的文件,只输出文件名

melody@melody-HP-Compaq-dc7900-Small-Form-Factor:~/workspace$grep-l"return 

0"/home/melody/workspace/

grep:/home/melody/workspace/:是一个目录


melody@melody-HP-Compaq-dc7900-Small-Form-Factor:~/workspace$grep-r-l "return 

0"/home/melody/workspace/

/home/melody/workspace/lookhb.c

/home/melody/workspace/size.c

/home/melody/workspace/main.c

/home/melody/workspace/mainl.c


注意这个例子中,当为目录时,一定要加-r递归搜索



3.查看目录下包含return0的文件,输出文件名加相应的行:

melody@melody-HP-Compaq-dc7900-Small-Form-Factor:~/workspace$grep -r "return 0" /home/melody/workspace/

/home/melody/workspace/lookhb.c: return0;

/home/melody/workspace/size.c: return0;

/home/melody/workspace/main.c: return0;

/home/melody/workspace/mainl.c: return0;


melody@melody-HP-Compaq-dc7900-Small-Form-Factor:~/workspace$grep -r "return 0" /home/melody/workspace/ -n

/home/melody/workspace/lookhb.c:5: return0;

/home/melody/workspace/size.c:5:return0;

/home/melody/workspace/main.c:17: return0;

/home/melody/workspace/mainl.c:15: return0;


接下来,上一些有正则表达式例子

总结一下:限定行首(^)/行尾字符($),限定一些特定的字符”..[..]..”,精确匹配(/),匹配重复字符(“*”)


melody@melody-HP-Compaq-dc7900-Small-Form-Factor:~/workspace$grep -n ^

i/home/melody/workspace/size.c

2:intmain()


melody@melody-HP-Compaq-dc7900-Small-Form-Factor:~/workspace$grep -n ^ /home/melody/workspace/size.c

1:#include<stdio.h>

2:intmain()

3:{

4: printf("%d\n",sizeof("abc"));

5: return0;

6:}

^i可以就这样写,也可以加单引号,注意是单引号!!


匹配特定的字符[]中满足其中之一就可以了。eg.

melody@melody-HP-Compaq-dc7900-Small-Form-Factor:~/workspace$grepp[ea]tsize.c -n

4://pat;

5: //pet;


类比:

melody@melody-HP-Compaq-dc7900-Small-Form-Factor:~/workspace$grep[^A]size.c--color=always

#include<stdio.h>

intmain()

{

ABCDS;

//KO //pat;

//pet;

//hello;

printf("%d\n",sizeof("abc"));

return0;

}

melody@melody-HP-Compaq-dc7900-Small-Form-Factor:~/workspace$grep^Asize.c--color=always

ABCDS;


melody@melody-HP-Compaq-dc7900-Small-Form-Factor:~/workspace$grep //.../ size.c --color=always

//KO //pat;


//.../表示的是什么意思呢?就是以//字符开始的中间有三个其他任意字符(三个.),后面还接了个/的。


精确匹配:
melody@melody-HP-Compaq-dc7900-Small-Form-Factor:~/workspace$grep -n 'ab\{2\}'size.c

8:aaaaaaaaaabababababababbabaababa;

注意,一定要加引号。


melody@melody-HP-Compaq-dc7900-Small-Form-Factor:~/workspace$grep -n ab* size.c -i

2:intmain()

4:-----ABCDS;

5:--haha;

6:ABabaaaab;

7:ab;

8:aaaaaaaaaabababababababbabaababa;

9://KO //pat;

12: printf("%d\n",sizeof("abc"));


ab*-i就是指的是以a开头,出现0次或者多次b的字符串,不区分大小写!

0 0
原创粉丝点击