egrep和grep的区别
我有一个有关grep
和egrep
在unix
。
正如我最近在unix
研究shell commands
,我想知道grep和egrep之间有什么区别。
我发现我们可以用正则expression式来使用grep和egrep。 但是,我发现这两个命令之间有些不同:
对于^
,grep和egrep具有相同的含义,即在一开始就发现这些行包含给定的东西。
但是,对于|
,grep,在前面没有反斜杠|
,意味着|
字符 ,如果我在它前面放一个斜杠,就会发现find这行的特殊含义,它包含前面和后面的东西。 但是,egrep,这是相反的。 |
具有grep和\|
的后面的意思 在使用它时有grep的以前的意思。
其他人可以解释一下为什么?
是的我可以。
egrep
命令是grep
二进制的快捷方式,但有一个例外,当grep
被调用为egrep
, grep
二进制会激活其内部逻辑,因为它将被称为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道进行纯grep
search来获得它。
所以,这就是为什么你应该逃避|
在你的egrep
命令中实现与grep
相同的效果。 转义将屏蔽掉|
的特殊含义 grep
二进制命令。