Linux 版 (精华区)
发信人: tcpip (干打雷,不下雨), 信区: Linux
标 题: 搜索文件命令:grep命令与fgrep命令
发信站: 哈工大紫丁香 (Mon Jun 7 11:10:16 1999), 转信
搜索文件命令:grep命令与fgrep命令
过滤器命令grep与fgrep用来搜索与文件中的字符串相匹配的模式,然后它通知用户在
什么文件中搜索到与指定的模式匹配的字符串,并打印出所有包含该字符串的文本行,
在该文本行的最前面是该行所在的文件名。grep命令一次只能搜索一个指定的模式,而
fgrep命令却可以一次搜索多个模式。过滤器命令grep与fgrep的使用及其选项见附表1
4-1。过滤器命令grep与fgrep搜索与定位文件中特定的主题是非常有用。要搜索的模式
可以被认为是一些关键词,你可以用它们来搜索文件中包含的这些关键词。对于grep命
令,它的搜索功能比fgrep要强大,因为grep命令的搜索模式可以是正则表达式,而fg
rep却不能。有关正则表达式(在Ed行编辑器中常使用正则表达式),本章的后半部分
将给予介绍。14.3.1grep命令过滤器命令grep有两个参数,其中,第一个参数是要搜索
的模式,而第二个参数是要搜索的文件名列表。其用法如下:在命令行的命令后键入搜
索的模式,再键入要搜索的文件。其中,文件名列表中也可以使用特殊字符,如星号“
*”等,以用来生成文件名列表。$ grep pattern filenames-list
在下面的例子中,grep命令搜索preface文件中包含模式“stream”的文本行。
$ grep stream preface
consists of a stream of
如果你想在搜索的模式中包含多个单词,你可以用单引号把要搜索的模式括起来,以用
来表明搜索的模式是由包含空格的多个单词组成。否则,Shell将把空格认为是命令行
参数的定界符,而grep命令将把搜索模式中的单词解释为文件名列表中的一部分。在下
面的例子中,grep命令用来搜索模式“text file”。$ gep 'text file' preface
A text file in Unix
text files, changing or
如果你在文件名列表中使用了多个文件,grep命令将在匹配的文本行之前输出相应的文
件名。在下面的例子中,grep命令搜索文件preface及intro中的模式“data”,在输出
每个匹配的文本行之前,列出了其对应的文件名。$ grep data preface intro
preface: data in the file
intro: new data
前面已经提到过,你可以在命令行上用Shell特殊字符来生成将要搜索的文件名列表。
在下面的例子中,特殊字符星号“*”用来生成一个文件名列表,该列表包含当前命令
下所有的文件。该命令将非常简单方便地搜索出当前目录下所有文件中包含与模式匹配
的字符串。$ grep data *
特殊字符在搜索一组指定的文件是非常有用。例如,如果你想搜索所有的C程序源文件
中特定的模式,你可以用“*.c” 来指定文件名列表。假设你的C程序中包含一个不必
要的循环语句(如while语句),并要找到这些语句,你可以用如下的命令来搜索并显
示所有包含while语句的代码行:$ grep while *.
c过滤器命令grep也有一组选项,这些选项可以改变其输出方式。例如,你可以在搜索
到的文本行上加入行号,或者只输出文本行的行号,或者输出所有与搜索模式不匹配的
文本行,或只简单地输出已搜索到指定模式的文件名。同时,你也可以指定grep命令忽
略大小写。这些选项在附表14-1中列出。fgrep命令
搜索文件命令fgrep的搜索速度要快于grep命令,且fgrep命令可以一次迅速地搜索多个
模式。但是,与grep不同,fgrep命令不能搜索正则表达式。此外,搜索文件命令fgre
p不能使用特殊字符,只能搜索确定的模式。你可以在命令行上键入搜索的模式,或者
使用-f选项来从文件中读取要搜索的模式。在命令行上键入搜索的模式时,每个模式必
须用换行字符隔开(从文件中读取的搜索模式也是如此),且整个搜索模式列表必须用
双引号括起来;此外,每个搜索模式本身还必须用反斜扛字符“\”隔开。在下面的例
子中,用户搜索preface文件中包含字符串“editor”及“create”的文本行。必须注
意的是,字符串“editor”及“create”用换行字符隔开,且换行字符的前一字符是反
斜扛字符“\”。$ fgrep "editor\
create" perishables
characters. An editor can
be used to create such
用-f选项,fgrep命令将从文件中读取搜索模式列表。该文件中必须包含一个搜索模式
列表,且每个搜索模式必须独占一行,fgrep命令在进行搜索时将同时搜索这些模式。
当你经常要搜索一组常见字符串时,fgrep命令的该功能非常有用。在下面的例子中,
用户把要搜索的模式放置在文件mypats中,然后,fgrep命令从文件mypats中读取搜索
的模式。$ cat mypatseditor
create
$ fgrep -f mypats preface
--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: bin@mtlab.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.294毫秒