如何制作竖条 在grep中工作?


10

这是我尝试过的grep命令行示例:

grep '(565172|565173|565175)' /var/log/cups/error_log

即使所有3个值都在文件中多次,它也不会产生任何输出。

我尝试转义条形,并且这有所改善-检测到中间值,但没有检测到第一个或最后一个。

grep '(565172\|565173\|565175)' /var/log/cups/error_log

我也尝试过两次越狱,但没有结果。

grep '(565172\\|565173\\|565175)' /var/log/cups/error_log

我究竟做错了什么?谢谢。

Answers:


14

您尝试使用的语法属于扩展的正则表达式,因此答案非常简单,无论使用egrep还是包含-E标志。


17

您遇到的是基本和扩展正则表达式之间的区别。从grep的手册页:

在基本正则表达式中,元字符?,+,{,|,(和)失去其特殊含义;而是使用反斜杠版本\?,+,{,\ |,(和)。

因此,您可以执行以下任一操作:

 grep '\(565172\|565173\|565175\)' /var/log/cups/error_log

要么

grep -E '(565172|565173|565175)' /var/log/cups/error_log

-E标志打开“扩展”正则表达式。GNU grep还支持与perl兼容的正则表达式。


写我的答案时分心。似乎亚当击败了我。
史蒂文D

4
但是您增加了解释-我之所以无法奏效,是因为我只是在逃避酒吧,而不是逃避现实。
Mark Ransom 2010年

1
我不知道您可以再次转义这些特殊字符来获得相同的结果,因此为您+1!
亚当·伯瑞克

1
以上是我在SO / SE中见过的最文明的一组交流。
麦克啮齿动物
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.