如何使用grep命令搜索多个模式?

时间:2016-11-05 20:40:32

标签: linux bash grep

我正在学习使用grep,我尝试使用以下命令查找ghci>> interspace 1 2 1 [1,1,2,1,1] [1,2,1,2,1,2,1] ghci>> interspace 1 2 1 [1,1,3] [1,2,1,3] ghci>> interspace 1 2 1 [1,2,4,2] [1,2,4,2] ghci>> interspace 1 2 1 [1] [1] ghci>> interspace 1 2 1 [] [] 文件中的条目,但是我收到错误:

/var/log/messages

我收到错误。比我尝试以下内容并用单引号替换双引号:

grep "Oct 23 21:22:44" | "80" /var/log/messages

这也不起作用。为什么这是错误的,因为我们可以使用管道搜索多个模式! 是因为10月23日21:22:44和80在不同的地方!

80,日期在文件中的顺序不同!

3 个答案:

答案 0 :(得分:4)

这种语法:

grep "Oct 23 21:22:44" | "80" /var/log/messages

等同于运行grep并将输出传递给名为80的文件。

一种操作方法您需要的是-E选项(--extended-regexp)能够按原样使用|,如下所示:

grep -E "Oct 23 21:22:44|80" /var/log/messages

答案 1 :(得分:2)

您还可以使用-e选项:

grep -e 'Oct 23 21:22:44' -e '80' /var/log/messages

如果搜索字词不需要正则表达式,则可以使用-F选项 - 它更快,并且避免需要转义元字符。谢谢@ mklement0指出来。


此外,除非您需要执行command substitutionparameter expansion等,否则请使用单引号。相关:Why does my shell script choke on whitespace or other special characters?

答案 2 :(得分:1)

您的命令需要进行2项更改:

  • 对于单个GREP命令中的多个搜索条件,请使用-E parameter

  • 将所有条件与管道字符组合在一起。并且之间没有空格

grep -E "Oct 23 21:22:44|80" /var/log/messages