全局正则表达式print或仅grep是Unix和Linux系统中最通用的命令之一。 该命令查找单个或多个输入文件以及匹配的模式行。 结果,您将获得带有匹配行的标准输出。
如果您未指定文件,则grep使用标准输入进行读出,并且很可能是另一条命令的输出。 总体而言,不管您使用grep时是否带有文件名,grep都具有简单的语法。
本文为您提供了grep语法的快速概述,以及可以与文件名一起使用或不与文件名一起使用的一些基本命令。
在你开始前
所有grep命令都遵循相同的语法,并且每个参数都有特定的功能。 这是示例行:
grep模式
您可以在grep中使用多个OPTIONS来控制命令输出,并且该数目从零开始。 PATTERN表示要应用的搜索模式。 对于FILE,这是一个或多个文件名所在的位置,但是参数可以设置为零。
命令输出中的字符串搜索
如所示,您无需使用特定的输入文件。 可以在grep中使用另一个命令的输出来获取与模式完全匹配的行。 这可以用来确定系统上哪些进程处于活动状态。 这是示例命令语法:
$ ps -ef | grep www-data
您获得的输出应如下所示:
www-data 18247 12675 4 16:00? 00:00:00 php-fpm:池www
根18272 17714 0 16:00 pts / 0 00:00:00 grep –color = auto –exclude-dir = .bzr –exclude-dir = CVS –exclude-dir = .git –exclude-dir = .hg –exclude- dir = .svn www-data
www-data 31147 12770 0 Oct22? 00:05:51 Nginx:工作进程
www-data 31148 12770 0 Oct22? 00:00:00 nginx:缓存管理器进程
有一种方法可以排除具有grep进程功能的命令行。 为此,您需要使用$ ps -ef | grep www-data | grep -v grep命令。
Grep Word搜索
您可以使用grep命令在系统文件中搜索特定单词。 实际上,不需要键入整个单词。 例如,您可以只使用gnu ,命令将输出其中包含这三个字母的所有单词。 命令语法为:
$ grep gnu / usr / share / words
执行命令后,您的输出应如下所示:
天鹅座
牛羚
句间
lgnu9d
木材
大酒瓶
马格努森
泥炭藓
花生
另一方面,您可以仅搜索该特定单词或字母字符串,而排除其他所有内容。 为此,您需要在语法中添加-w或–word – regexp 。 在这种情况下,示例命令如下所示: $ grep -w gnu / usr / share / words 。
注意:出于语法目的,某些命令在结尾处有一个句号。 您不需要grep的标点符号。 复制/粘贴命令时将其排除。
Grep区分大小写吗?
默认情况下,所有grep命令均区分大小写。 这意味着使用小写和大写字符会使命令本身有所不同。 但是,您可以在命令行中添加– i ( –忽略– case ),并允许系统搜索大小写单词。
例如,您的输入命令可能类似于$ grep -i Zebra / usr / share / words 。 搜索斑马线时,它允许输出匹配大小写字母的任意组合。
行号
使用–line-number选项或仅使用-n可以确定具有与特定搜索模式匹配的字符串的行数。 结果,您将获得一个标准输出,在其前面有一个行号。
确切的命令可能看起来像这样: $ grep -n 10000 / etc / services 。 执行后,输出将提供在10000行上找到的所有匹配项。 查看以下示例:
10423:ndmp 10000 / tcp
10424:ndmp 10000 / udp
资料夹中的档案
您可以在grep命令后面加上星号而不是文件名。 再次使用gnu标准,该命令看起来像$ grep gnu * ,并且输出列出了包含gnu的文件。请注意,这种命令返回一行。
注意:在grep中,一行是指一系列字符,这些字符一直运行到指定的间隔。 除非您缩小搜索范围,否则输出可能包含整个信息段。
使用Grep进行下一步
本指南仅介绍了grep的用途。 可能需要花些时间才能解决所有问题,但是语法遵循相当简单的原则。 通过一些实践,无论文件名有无,您都可以将搜索结果完善到完美。