我正在学习使用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,日期在文件中的顺序不同!
答案 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 substitution,parameter 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