grep
是一个强大的命令行工具,它允许你在一个或者多个输入文件中匹配一个正则表达式,并且将每一个匹配结果输出到标准输出。
在本文中,我们将会向你展示如何使用GNU grep
来搜索多个字符串或者样式。
一、使用 Grep 搜索多个样式
GNU grep
支持三种正则表达式语法,基本的,扩展的,和兼容 Perl 的。当没有指定任何正则表达式,grep
将搜索样式解释为基本的正则表达式。
想要搜索多个样式,使用 OR(间隔符)。
这个间隔操作符号(|
)允许你指定不同的样式,例如字符串或者正则表达式。这个操作符比所有的正则表达式操作符的优先级都要低。
使用grep
基本正则表达式搜索多个样式的语法如下:
grep 'pattern1|pattern2' file...
通常用单引号将正则表达式包裹起来,避免被 shell 转义。
当使用基本的正则表达式时,元字符将被解释为文字字符。想要保持元字符的意义,它们必须和一起使用。这就是为什么我们避免将间隔符和
一起使用。
想要将样式解释为扩展的正则表达式,运行grep
加上-E
(或者--extended-regexp
)选项。当使用扩展正则表达式,不要忘了|
操作符。
grep -E 'pattern1|pattern2' file...
想要获得更多关于编写正则表达式的信息,查询我们的文档 Grep regex
二、使用 Grep 搜索多个字符串
文字字符串是最基本的样式。
在下面的例子中,我们在 Nginx log 中 搜索所有的fatal
, error
, 和 critical
:
grep 'fatal|error|critical' /var/log/nginx/error.log
如果你搜索的字符包含空格,使用双引号包裹它。
这是使用扩展正则表达式的例子,避免将隔离符和一起使用。
grep -E 'fatal|error|critical' /var/log/nginx/error.log
默认情况下,grep
是大小写敏感的。这意味着大写和小写字符被区别对待。
想要大小写不敏感,运行 grep 加上-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
词语字符串包含 字符和数字(a-z, A-Z, and 0-9) ,还有下划线(_)。所有其他的字符被认为非词语字符。
想要获得更多关于grep
选项的详细信息,浏览我们的文章 Grep command
三、总结
我们已经向你展示了如何使用grep
来搜索多个样式,字符串和词语。
如果你有任何疑问,请通过以下方式联系我们:
微信: sn0wdr1am86
微信群: 加上面的微信,备注微信群
QQ: 3217680847
QQ 群: 82695646