grep是一个强大的命令行工具,允许您在一个或多个输入文件中搜索与正则表达式匹配的行,并将每个匹配的行写入标准输出。
在本文中,我们将向您展示如何使用 GNUgrep搜索多个字符串或模式。
Grep 多种模式
GNUgrep支持三种正则表达式语法,Basic、Extended 和 Perl 兼容。如果未指定正则表达式类型,grep则将搜索模式解释为基本正则表达式。
要搜索多个模式,请使用 OR(交替)运算符。
交替运算符|(管道)允许您指定不同的可能匹配项,可以是文字字符串或表达式集。此运算符在所有正则表达式运算符中具有最低优先级。
使用基本正则表达式搜索多个模式的语法grep如下:
grep 'pattern1|pattern2' file…
始终将正则表达式括在单引号中,以避免 shell 解释和扩展元字符。
使用基本正则表达式时,元字符被解释为文字字符。为了保持元字符的特殊含义,必须使用反斜杠 ( ) 对其进行转义。这就是我们|用斜杠转义 OR 运算符 ( ) 的原因。
要将模式解释为扩展的正则表达式,请调用grep(-E或--extended-regexp) 选项。使用扩展正则表达式时,不要转义|运算符:
grep -E 'pattern1|pattern2' file…
有关如何构造正则表达式的更多信息,请查看我们的文章Grep regex 。
Grep 多个字符串
文字字符串是最基本的模式。
在以下示例中,我们在Nginx 日志 错误文件中搜索所有出现的单词fatal、error和:critical
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将显示该字符串嵌入较大字符串的所有行。因此,如果您正在搜索“error”,grep还将打印“error”嵌入较大字词的行,例如“errorless”或“antiterrorists”。
要仅返回指定字符串是整个单词(由非单词字符括起来)的那些行,请使用-w( 或--word-regexp) 选项:
grep -w 'fatal|error|critical' /var/log/nginx/error.log
单词字符包括字母数字字符(az、AZ 和 0-9)和下划线 (_)。所有其他字符都被视为非单词字符。
有关grep选项的更多详细信息,请访问我们的Grep 命令手册 。
结论
我们已经向您展示了如何grep搜索多个模式、字符串和单词。