如何Grep多个字符串和模式

grep 是一种功能强大的命令行工具,使您可以在一个或多个输入文件中搜索与正则表达式匹配的行,并将每条匹配的行写入标准输出。

在本文中,我们将向您展示如何使用GNU grep 搜索多个字符串或模式。

Grep多种模式

GNU grep 支持三种正则表达式语法,Basic,Extended和Perl兼容。 如果未指定正则表达式类型, grep 将搜索模式解释为基本正则表达式。

要搜索多个模式,请使用OR(交替)运算符。

交替运算符 | (管道)可让您指定不同的可能匹配项,这些匹配项可以是文字字符串或表达式集。 在所有正则表达式运算符中,此运算符的优先级最低。

使用来搜索多个模式的语法 grep 基本正则表达式如下:

grep 'pattern1|pattern2' file...

始终将正则表达式括在单引号中,以避免shell解释和扩展元字符。

使用基本正则表达式时,元字符将解释为文字字符。 为了保留元字符的特殊含义,必须使用反斜杠将其转义()。 这就是为什么我们要转义OR运算符(|)。

要将模式解释为扩展的正则表达式,请调用 grep-E ( 要么 --extended-regexp) 选项。 使用扩展的正则表达式时,请勿转义 | 操作员:

grep -E 'pattern1|pattern2' file...

有关如何构造正则表达式的更多信息,请查看我们的文章Grep regex。

Grep多个字符串

文字字符串是最基本的模式。

在以下示例中,我们正在搜索所有出现的单词 fatalerrorcritical 在Nginx日志错误文件中:

grep 'fatal|error|critical' /var/log/nginx/error.log

如果要搜索的字符串包含空格,请将其用双引号引起来。

这是使用扩展正则表达式的相同示例,它消除了对运算符进行转义的需要 |

grep -E 'fatal|error|critical' /var/log/nginx/error.log

默认, grep 区分大小写。 这意味着将大写和小写字符视为不同的字符。

要在搜索时忽略大小写,请调用 grep with-i 选项(或 --ignore-case):

grep -i 'fatal|error|critical' /var/log/nginx/error.log

搜索字符串时, grep 将显示该字符串嵌入较大字符串中的所有行。 因此,如果您要搜索“错误”, grep 还将在较大的单词(例如“无错误”或“反恐分子”)中打印出“错误”所在的行。

要仅返回指定字符串是整个单词(用非单词字符括起来)的那些行,请使用 -w ( 要么 --word-regexp) 选项:

grep -w 'fatal|error|critical' /var/log/nginx/error.log

文字字符包括字母数字字符(az,AZ和0-9)和下划线(_)。 所有其他字符均视为非单词字符。

有关更多详细信息 grep 选项,请访问我们的文章Grep命令。

结论#

我们向您展示了如何 grep 搜索多个模式,字符串和单词。

如果您有任何疑问或反馈,请随时发表评论。

grep终端

Sidebar