这是我尝试过的 grep 命令行示例:
grep '(565172|565173|565175)' /var/log/cups/error_log
Run Code Online (Sandbox Code Playgroud)
它不会产生任何输出,即使所有 3 个值都在文件中多次。
我尝试逃离酒吧,这在某种程度上改善了情况 - 检测到中间值,但没有检测到第一个或最后一个。
grep '(565172\|565173\|565175)' /var/log/cups/error_log
Run Code Online (Sandbox Code Playgroud)
我也尝试过双重转义,但没有得到任何结果。
grep '(565172\\|565173\\|565175)' /var/log/cups/error_log
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?谢谢。
Ste*_*n D 17
您遇到的是基本正则表达式和扩展正则表达式之间的区别。从 grep 的手册页:
在基本的正则表达式中,元字符 ?、+、{、|、( 和 ) 失去了它们的特殊意义;而是使用反斜杠版本 \?、+、{、\|、( 和 )。
因此,您可以执行以下操作之一:
grep '\(565172\|565173\|565175\)' /var/log/cups/error_log
Run Code Online (Sandbox Code Playgroud)
或者
grep -E '(565172|565173|565175)' /var/log/cups/error_log
Run Code Online (Sandbox Code Playgroud)
-E 标志打开“扩展”正则表达式。GNU grep 还支持与 perl 兼容的正则表达式。
归档时间: |
|
查看次数: |
7392 次 |
最近记录: |