在我们关于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变得更加强大,但我们将把这个话题放在另外一天。