grep: 搜索单词

作者:Jan Rooijackers

在 Linux(或任何其他 UNIX)中,许多人使用过滤器,即从标准输入 (stdin) 读取输入、对输入执行某些操作并将结果返回到标准输出 (stdout) 的小型程序(黑盒)。

Linux 有许多过滤器。 一些例子是

  • wc:打印文件中字节数、单词数和行数

  • tr:转换或删除字符

  • grep:打印匹配模式的行

  • sort:对文件中的行进行排序

  • cut:从文件中剪切选定的字段

学习这些过滤器的最简单方法是使用它们。乍一看,这可能令人望而却步,因为您可能不知道这些过滤器的所有功能。 我将描述 grep 的功能,以便您可以从中受益。

我将使用本文 (article.txt) 作为所有示例的输入文件。

语法

grep 命令的语法如下

grep [ -[[AB] ]num ] [ -[CEFGVBchilnsvwx] ]\
[ -e ] pattern| -file ] [ files... ]

我使用的是 GNU grep Version 2;如果您使用的是其他版本,您可能有一些略有不同的选项。 我只会触及我最常用的那些选项。 要了解有关 grep 命令的更多信息,请参阅手册页。 grep 命令的变体是 egrepfgrepgrep 包括模拟这些命令的标志:-E 用于 egrep,-F 用于 fgrep。

命令最简单的形式是

grep flip article.txt

这将在文件 article.txt 中搜索单词“flip”,并将显示包含单词“flip”的所有行。

grep 也接受正则表达式,因此要在目录中的所有文件中搜索“flip”,可以给出以下命令

grep flip *

包含单词“flip”的所有文件中所有行将被显示,并在前面加上文件名。 因此,输出的第一行将如下所示

article.txt:grep flip article.txt
该行以包含单词“flip”的文件名开头,后跟一个冒号,然后是相应的行。

有时您可能想要定义对特殊字符或单词组合的搜索。 为此,请将表达式放在引号之间,以便将整个表达式/模式视为一个整体。 然后该命令将如下所示

grep -e "is the"

我在此示例中放入了 -e (即,执行模式搜索)选项,只是为了演示目的。 没有必要指定它,因为它是默认值。

要查看找到模式的行号,请使用 -n 选项。 输出将如上所示,文件名被冒号前的行号替换。

另一个为我们提供数字的选项是 -c 选项。 此选项输出文件中单词存在的次数。 本文包含单词“flip” 10 次。

> grep -c flip article.txt
10
grep 和速度

您现在可能能够想到许多可以使用 grep 的方法。 对于您经常使用的任何命令,速度都很重要。 通常,grep 可以快速完成其工作。 但是,如果搜索是在许多大文件上完成的,则返回结果的速度会较慢。 在这种情况下,您可以通过使用 fgrepegrep 来加快该过程。 fgrep 仅用于查找字符串,而 egrep 用于复杂的正则表达式。

结论

可以使用 grep 快速找到文件名、单词、句子和数字。 此外,将 grep 命令与其他过滤器一起使用可能非常强大并且具有很大的价值。 例如,您可以搜索统计文件并通过 sortcut 命令(参见手册页)管道传输输出来对输出进行排序

grep ... | sort ... | grep ... | cut ... > result

这是一个快速入门介绍,可以帮助您入门并激发您的好奇心,以了解有关 grep 和其他过滤器的更多信息。

grep: Searching for Words
Jan Rooijackers 在 Ericsson Data Netherlands (DSN) 担任 IT 工程师。 他最喜欢的爱好之一是编程 (Tcl/Tk) 和尝试计算机世界中的新事物。 他尽可能多地与妻子和两个儿子共度时光。 可以通过 dsnjaro@apskid.ericsson.se 与他联系。
加载 Disqus 评论