试图将正则表达式传递给grep

时间:2010-10-15 08:11:56

标签: linux bash unix grep

我正在尝试从我的日志文件中提取错误行:

我用过这个:

more report.txt | grep -E (?i)(error)

我收到此错误消息:

bash: syntax error near unexpected token `('

我做错了什么?我正在尝试提取包含“错误”的所有行,忽略区分大小写,因此它可能是错误,错误,错误等。

4 个答案:

答案 0 :(得分:4)

你的产品线的问题在于外壳是由shell而不是grep拾取的,你需要引用它们:

grep -E '(?i)(error)' report.txt

对于这项特殊任务,其他答案当然是正确的,你甚至不需要这些答案。

答案 1 :(得分:3)

你可以这样做:

grep -i error report.txt

实际上不需要more该文件,然后将其传递给grep。您可以将文件名作为参数传递给grep

要使搜索不区分大小写,请使用-i的{​​{1}}选项。

并且实际上没有必要选择grep选项,因为您使用的模式-E不是扩展的正则表达式。

您看到的错误的原因是您的模式error由shell解释,因为shell除了在此上下文中看到(?i)(error)之外它没有抛出错误,类似于当你(时。

要解决此问题,请引用您的模式。但这不会解决您在文件中找到ls (*)的问题,因为模式error会查找字符串(?i)(error) !!

答案 2 :(得分:1)

你可以使用

grep -i error report.txt

答案 3 :(得分:0)

这将实现相同的结果

cat report.txt | grep -i error

如果你想分页结果:

cat report.txt | grep -i error | more