Linux基础知识 ·

Linux文件三剑客之grep

grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Linux的grep家族包括grep、egrep和fgrep。

egrep和fgrep的命令只跟grep有很小不同。egrep和fgrep都是grep的扩展,支持更多的re元字符,fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。

grep 命令说明

用法: grep [选项]... PATTERN [FILE]...
在每个 FILE 或是标准输入中查找 PATTERN。
默认的 PATTERN 是一个基本正则表达式(缩写为 BRE)。
例如: grep -i 'hello world' menu.h main.c

常用选项:

 

-A NUM:打印出紧随匹配的行之后的下文 NUM 行。

-B NUM:打印出紧随匹配的行之前的上文 NUM 行。

-C NUM:打印出匹配的行的上下文前后各 NUM 行。

-D ACTION:如果输入文件是一个设备,FIFO  或是套接字(socket)则使用动作 ACTION 来处理它。ACTION(read或skip),默认read.

-d ACTION:如果输入文件是一个目录,使用动作  ACTION  来处理它。ACTION (read,skip,recurse),默认read。

-E: 将模式 PATTERN 作为一个扩展的正则表达式来解释,系统默认命令别名为egrep。

-f FILE:从文件FILE中获取模式,每行一个。

-H:为每个匹配打印文件名。

-i:忽略模式 PATTERN 和输入文件中的大小写的分别。

-L:列出未能匹配到指定模式的文件的文件名,而非匹配的指定模式的内容。

-l:列出能够匹配到指定模式的文件的文件名,而非匹配的指定模式的内容。

-m NUM:在找到 NUM 个匹配的行之后,不再读这个文件。

-n:在输出的每行前面加上它所在的文件中它的行号。

-o:只显示匹配的行中与 PATTERN 相匹配的部分。

-x:只选择能匹配完整一行的匹配。

-q:安静。不向标准输出写任何东西。如果找到任何匹配的内容就立即以状态值 0。

--include=PATTERN:仅仅在搜索匹配 PATTERN 的文件时在目录中递归搜索。

--exclude=PATTERN:在目录中递归搜索,但是跳过匹配 PATTERN 的文件。

grep 操作演示:

示例1:查找/etc/ 下包含passwd 字符的文件。

示例2:查找/etc/ 下包含passwd 字符的文件,并且只列出其文件名。

示例3:查找/etc/ 下包不含passwd 字符的文件,并且只列出其文件名。

示例4:查找/etc/passwd 文件中所有已 nologin 结尾的行,并打印行号。

参与评论