试图将正则expression式传递给grep

我试图从我的日志文件中提取错误行:

我用这个:

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

我得到这个错误消息:

 bash: syntax error near unexpected token `(' 

我究竟做错了什么? 我试图提取所有包含“错误”的行忽略大小写,所以它可以是错误,错误,错误等

你可以做:

 grep -i error report.txt 

真的没有必要more的文件,然后grep 。 您可以将文件名作为参数传递给grep

为了使搜索不区分大小写,可以使用grep-i选项。

而实际上没有必要去-E选项,因为你使用的模式error不是一个扩展的正则表达式。

你所看到的错误的原因是你的模式(?i)(error)由shell解释,因为shell除了看到(在这种情况下,它会抛出一个错误,类似于你做ls (*)

要解决这个问题,你引用你的模式。 但是这并不能解决你在文件中发现error的问题,因为模式(?i)(error)查找字符串'ierror'

你的行的问题是,parens是由shell而不是grep拾取的,你需要引用它们:

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

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

您可以使用

 grep -i error report.txt 

这将达到相同的结果

 cat report.txt | grep -i error 

如果你想分页的结果:

 cat report.txt | grep -i error | more