如何使用Grep在文件中执行模式搜索

在我们关于grep命令的第一篇文章中,我们介绍了该工具提供的很多功能,包括如何使用它来仅搜索单词,搜索两个单词,计算包含匹配单词的行等。 除此之外,该工具还提供了一些更易于理解和有用的功能。 在这篇文章中,我们将讨论其中的一些。

请注意,本教程中提到的所有示例都已在Ubuntu 14.04LTS上进行了测试。 此外,我们将在本教程中为我们所有与grep相关的示例使用以下文件(test_file1.txt):

用Grep搜索不区分大小写

默认情况下,grep区分大小写,例如,它将分别处理“ABC”和“abc”。 但是,如果希望搜索不区分大小写,可以使用-i命令行选项。

grep -i [string-to-be-searched] [filename]

例如:

grep -i "linux" test_file1.txt

注意 :不仅模式(例如,上面的例子中的'linux'),grep手册页面说-i选项还确保输入文件的区分大小写也被忽略。 这是摘录:

 -i, --ignore-case
Ignore case distinctions in both the PATTERN and the input files. (-i is specified by POSIX.)

但是,我们终于不能再现输入文件相关的行为。

在Grep中显示包含匹配字符串的行的某些非匹配行

使用该工具,您还可以在包含匹配的字符串的行之前,之前或周围显示指定数量的行。

使用-A命令行选项在匹配的行之后打印“N”行。

$ grep -A N [string-to-be-searched] [filename]

例如:

$ grep -A 2 "linux" test_file1.txt

这是以上命令的输出

类似地,-B命令行选项用于在匹配行之前显示行。

$ grep -B N [string-to-be-searched] [filename]

例如:

$ grep -B 2 "linux" test_file1.txt

这是输出:

最后,要打印匹配行周围的行,请使用-C命令行选项。

$ grep -C N [string-to-be-searched] [filename]

例如:

$ grep -C 2 "linux" test_file1.txt

这是捕获的输出:

只有打印匹配的字符串在Grep

您还可以仅在标准输出上打印匹配的字符串(而不是默认显示的完整行)。 可以使用-o命令行选项访问此功能。

$ grep -o [string-to-be-searched] [filename]

例如,如果要求是在文件中搜索字符串“linux”(但是不能打印完整的行),那么我们将使用以下命令。

$ grep -o "linux" [file-name]

我们还可以使用通配符,例如*和。*来标记多个字符串。 例如,如果我们要从“如何”开始并以“linux”结尾,然后我们可以使用以下命令来打印一组单词。

$ grep -o “how.*linux” [file-name]

显示位置在Grep

grep命令还允许您显示匹配字符串出现的行的字节偏移量。 可以使用-b命令行选项访问此功能。 但是,为了更好地使用此选项,可以使用-o命令行选项,该选项将显示匹配字符串的确切位置。

$ grep -o -b [string-to-be-searched] [filename]

例如:

$ grep -o -b "for" test_file1.txt

这是输出:

结论

您可能每天都不需要所有这些选项,但您应该至少知道他们,因为您永远不知道他们什么时候可以方便。 当与正则表达式一起使用时,Grep变得更加强大,但我们将把这个话题放在另外一天。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏