egrep和grep的区别

我有一个有关grepegrepunix

正如我最近在unix研究shell commands ,我想知道grep和egrep之间有什么区别。

我发现我们可以用正则expression式来使用grep和egrep。 但是,我发现这两个命令之间有些不同:

对于^ ,grep和egrep具有相同的含义,即在一开始就发现这些行包含给定的东西。

但是,对于| ,grep,在前面没有反斜杠| ,意味着|字符 ,如果我在它前面放一个斜杠,就会发现find这行的特殊含义,它包含前面和后面的东西。 但是,egrep,这是相反的。 | 具有grep和\|的后面的意思 在使用它时有grep的以前的意思。

其他人可以解释一下为什么?

是的我可以。

egrep命令是grep二进制的快捷方式,但有一个例外,当grep被调用为egrepgrep二进制会激活其内部逻辑,因为它将被称为grep -E

你会问的区别是什么?和不同的是, -E参数使用扩展的正则expression式模式,它将允许您使用这样的元符号+ ?|pipe )。 它们不是像我们曾经用过的单词或文件名那样的序号,而是grep二进制本身的控制命令。 因此, | 意味着逻辑或。

所以,例如,你想列出目录中的文件,只看到那些包含“mp4”或“avi”扩展名的文件。 用egrep你会做:

ls | egrep "mp4|avi"

在这个例子中 像OR命令一样,它将抓取从ls输出包含“mp4”或“avi”string的所有名字。 如果你用plain grep命令运行它,你什么也得不到,因为grep不知道| 命令,它将search“mp4 | avi”全文string(带pipe道符号)。 例如,如果您的目录中有|MPG|cool-guy.q2.stats文件,那么您将通过使用pipe道进行纯grepsearch来获得它。

所以,这就是为什么你应该逃避| 在你的egrep命令中实现与grep相同的效果。 转义将屏蔽掉|的特殊含义 grep二进制命令。