本网站只能被运行在支持JavaScript脚本的环境中

使用grep检索字符串

本节概述

本节介绍一个长久以来一直被用来检索字符串的工具——grep。在一大堆HTML、JavaScript、CSS文件中查寻某个字符串的位置对于开发者来说可以说是一件非常困难的事。虽然目前已经具有各种用于检索字符串的图形检索工具,但是通过命令的使用,可以使检索操作变得更为简便。

什么是grep

grep原本是UNIX操作系统中的一种附属命令,用于从指定的文本文件中检索字符串,通过使用各种选项,可以添加各种灵活的检索条件。

通过正则表达式的使用,可以从各种文件中检索与复杂条件相匹配的字符串及其存在位置。目前,在各种编辑器或综合开发环境中都内置了与grep相类似的功能。

本节介绍如何使用grep命令检索字符串。

安装Windows用grep(GnuWin grep)

在Windows中可以使用各种与grep检索功能相类似的图形工具或命令行工具,此处介绍GnuWin产品中的grep工具。GnuWin为一个将使用GNU GPL等各种开源软件许可证发布的工具移植到Windows中的产品。目前公开174个工具。

访问GnuWin的grep页面,下载Complete package, except sources选项的安装包进行安装。

向导式安装方式

在安装完毕后,将安装路径下的bin子目录添加到操作系统的PATH环境变量中。

将安装路径下的bin子目录添加到操作系统的PATH环境变量中之后,即可在Windows命令行工具中运行grep命令。

grep的使用方法

grep命令的格式如下所示。

grep 选项 检索字符串 检索目标文件

接下来首先从最简单的检索操作开始。在如下所示的命令中,指定在当前目录中检索index.html文件中“<meta”文字的所在行。

grep "<meta" index.html

可以在指定文件时使用通配符对某个目录下的多个文件进行检索。在针对某个目录下的所有文件进行检索时,如果检索到子目录,会在检索结果中将子目录标出。在如下所示的命令中,指定在当前目录中检索所有文件中的“find”文字所在行。

grep "find" *

可以通过“-"连字符来使用选项。可以通过在选项中使用数字的方法在检索结果中显示检索字符串所在行及其前后的多行(连字符后的数字用于指定前后行数)。在如下所示的命令中,指定在当前目录中的所有后缀名为.html的文件中检索”find“文字所在行及其前2行与后2行。

grep -2 "find" *.html

可以通过在选项中使用文字”n“的方法在检索结果中显示行号。在如下所示的命令中,指定在当前目录中的所有后缀名为.html的文件中检索”find“文字所在行及其行号。

grep -n "find" *.html

可以通过在选项中使用文字”c“的方法统计指定文件中检索字符串出现的行数。在如下所示的命令中,指定在检索结果中显示当前目录中的所有后缀名为.html的文件中”find“文字所出现的行数。

grep -c "find" *.html

可以通过在选项中使用文字”r“的方法递归检索子目录。在如下所示的命令中,指定在检索结果中显示当前目录及其子目录中的所有后缀名为.html的文件中”Lulingniu“文字所在行。

grep -r "Lulingniu" *

在默认情况下,grep检索时严格区分英文字母的大小写。可以通过在选项中使用文字“i”的方法在检索时忽略大小写。在如下所示的命令中,指定在检索结果中显示当前目录的所有后缀名为.html的文件中”createelement“文字所在行,检索时忽略英文字母的大小写区分。

grep -i "createelement" *.html

可以通过在指定选项时在连字符后跟多个文字的方法来结合使用多个选项。指定在检索结果中显示当前目录及其子目录中的所有后缀名为.html的文件中”#mainnav“文字所在行及其行号,检索时忽略英文字母大小写区别。

grep -inr "#mainnav" *

在如下所示的命令中,指定在当前目录中的所有后缀名为.html的文件中检索”find“文字所在行及其前2行与后2行以及这些行的行号。

grep -2n "find" *.html

当需要执行复合检索时,可以通过“|”连字符来连接多个检索条件。在如下所示的命令中,指定在当前目录下的所有文件中检索即包含”find“文字,又包含“nearby”文字的行及其行号,检索时忽略英文字母的大小写区分。

grep -in "find" *|grep "nearby" *

grep命令中可以使用的所有选项如下表所示。

选项 动作
-(数字) 符合检索条件的行及其前后行,行数由连字符后的数字决定。
-c 文件中符合检索条件的行数。
-A(数字) 符合检索条件的行及其之后的行,行数由连字符后的数字决定。
-B(数字) 符合检索条件的行及其之前的行,行数由连字符后的数字决定。
-E 使用正则表达式进行检索。
-i 检索时忽略英文字母的大小写。
-n 在检索结果中显示行号。
-r 对子目录进行递归检索。
-v 在检索结果中显示不符合检索条件的行。