grep: 搜索单词
在 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 命令的变体是 egrep 和 fgrep。grep 包括模拟这些命令的标志:-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 可以快速完成其工作。 但是,如果搜索是在许多大文件上完成的,则返回结果的速度会较慢。 在这种情况下,您可以通过使用 fgrep 或 egrep 来加快该过程。 fgrep 仅用于查找字符串,而 egrep 用于复杂的正则表达式。
