在 Linux 中怎样进行 grep 搜索呢?通过例子来学习几个常用的方法

系统教程10个月前发布 lf00544
13 0 0

在 Linux 中怎样进行 grep 搜索呢?通过例子来学习几个常用的方法

grep 是一个功能强大的 unix 命令,可以在文件内容中搜索各种参数。在各种故障排除或调试中特别有用。

grep 有很多选项和使用场景,你应该不会全部都用得到,不过,其中有几个 grep 命令还是经常会用到的。

本文会举例说明一些最常见的 grep 命令,介绍其常见选项及用法。

如下表列出了一些常见的选项及其说明:

选项

例子

说明

i

grep -i pattern file

不区分大小写的搜索

A

grep -A n pattern file

显示搜索的后几行

B

grep -B n pattern file

显示搜索的前几行

C

grep -C n pattern file

显示搜索的前几行和后几行

v

grep -v pattern file

显示不匹配的行

c

grep -c pattern file

计算匹配的行数

l

grep -l pattern file

只显示搜索到的文件名称

w

grep -w pattern file

全字匹配

e

grep -e regex file

匹配正则表达式

a

grep -a pattern file

在二进制文件中搜索

r

grep -r pattern dir

递归搜索目录

grep 命令实例

你可能已经知道,要搜索文件中特定的文本或表达式,可以这样使用grep:

grep search_pattern filename

现在我们看看几个常见的例子

不区分大小写的搜索

默认情况下,grep 是区分大小写的。你可以使用 -i 选项来让其不区分大小写:

grep -i search_pattern filename

显示匹配文本的前后行

默认情况下,你只会看到匹配文本的当前行。但是,当你在排除故障的时候,看一下匹配行的前一行,或者后一行,也会有帮助。

你可以使用 -A 来显示匹配行之后的行。记住,A代表之后(After)。

下面的命令将显示匹配的行以及匹配后的5行:

grep -A 5 search_pattern filename

类似地,你可以使用 -B 选项在匹配的行之前显示行。记住,B代表之前(Before)。

下面的命令将在匹配行之前显示5行以及匹配行:

grep -B 5 search_pattern filename

我最喜欢的是选项 -C,因为它显示了匹配行之前和之后的行。C 代表圆(Circle)。

下面的命令将显示匹配行之前的5行、匹配行和匹配行之后的5行:

grep -C 5 search_pattern filename

显示不匹配的行

你可以使用 grep 显示与给定表达式不匹配的所有行。此“反向匹配”使用 -v 选项:

grep -v search_pattern filename

你可以将 -i-v 一起使用。

计算匹配行的数量

使用 -c 选项,可以不显示匹配的行,只显示与给定表达式匹配的行的数量。注意,这里的 c 是小写的 c。

grep -c search_pattern filename

你可以将 -c -v 选项一起用来查看与给定表达式不匹配的行数。当然,也可以结合使用不区分大小写的 -i 选项。

显示匹配行的行号

要显示匹配行的行号,可以使用 -n 选项。

grep -n search_pattern filename

显示行号也可以使用 -v 来进行反向搜索。

在多个文件中搜索

可以给出多个文件进行 grep 搜索:

grep search_pattern file1 file2

这样搜索是可以的。但平时更实用也更常用的,是搜索特定类型的文件,比如只搜索shell脚本(以 .sh 结尾的文件),可以这样使用 grep 命令:

grep search_pattern *.sh

递归搜索目录中的所有文件

你可以使用 -r 选项执行递归搜索,它会在当前目录以及子目录的所有文件中搜索给定的表达式:

grep -r search_pattern directory_path

仅显示文件名

默认情况下,grep 显示匹配的行。如果你已经在多个文件上运行了搜索,并且只想查看哪些文件包含字符串,那么可以使用 -l 选项。

grep -l search_pattern files_pattern

比如你要在所有.md文件中搜索单词 “handbook”,可以这样:

grep -l handbook *.md

全字符匹配(搜索完整单词)

默认情况下,grep 将显示包含给定字符串的任何行。你可能并不总是想要这样,比如你正在搜索“done”一词,它的结果还会显示包含“doner”或“abandoned”的行。

要使用全字符匹配 ,可以使用 -w 选项:

grep -w search_string file

这样,搜索单词 “done” 的时候,就只显示包含 “done” 的行,而不会显示包含 “doner” 或 “abandoned” 的行。

按正则表达式搜索

你可以使用正则表达式来搜索,选项 -e 可以允许使用正则表达式,另外一个选项 -E 允许使用扩展的正则表达式。

grep -e regex_pattern file

使用 “或运算符” |

你可以在同一个 grep 搜索中使用多个表达式,如果要搜索包含“表达式1”,或者“表达式2”的行,可以使用“或(OR)” 运算符 |,但是需要添加反斜线进行转义:

grep 'pattern1\|pattern' filename

AND运算符没有特定选项。为此,你可以多次使用 grep 和管道重定向。

搜索二进制文件

默认情况下,grep 会忽略二进制文件。你可以使用 -a 选项使其在二进制文件中搜索,就像它是文本文件一样:

grep -a pattern binary_file
© 版权声明

相关文章