我对grep
中的egrep
和unix
提出了疑问。
由于我最近正在研究shell commands
中的unix
,我想知道grep和egrep之间有什么区别。
我发现我们可以使用正则表达式的grep和egrep。但是,我发现这两个命令之间有所不同:
对于^
,grep和egrep具有相同的含义,即在一开始就找到包含给定内容的行。
然而,对于|
,grep在|
前面没有反斜杠,表示|
的字符,如果我在它前面放一个反斜杠,它会打开找到该行的特殊含义包含它前面和后面的东西。但是,对于egrep来说,情况正好相反。 |
具有grep的后一含义,\|
在使用时具有grep的前一个含义。
其他人可以解释一下原因吗?
答案 0 :(得分:67)
是的,我可以。
egrep
命令是grep
二进制文件的快捷方式,但有一个例外,当grep
被调用为egrep
时,grep
二进制文件会激活其内部逻辑因为它被称为grep -E
。
不同之处在于-E
选项允许使用扩展的正则表达式模式。它允许您使用+
,?
或|
等元符号。它们不是我们以前在单词或文件名中使用的序数字符,而是grep
二进制本身的控制命令。因此,|
表示逻辑OR。
因此,例如,您希望列出目录中的文件,并仅查看包含“mp4”或“avi”扩展名的文件。使用egrep
,您将执行以下操作:
ls | egrep "mp4|avi"
在此示例中,|
的行为类似于OR命令,它将从ls
中获取包含“mp4”或“avi”字符串的所有名称的输出。如果使用普通grep
命令运行它,你将什么也得不到,因为grep
不知道|
命令这样的东西,它将搜索“mp4 | avi”全文字符串(使用 pipe 符号)。例如。如果你的目录中有|MPG|cool-guy.q2.stats
个文件,你可以通过普通grep
搜索管道获得它。
因此,这就是为什么你应该在|
命令中转义egrep
以达到与grep
相同的效果。转义将屏蔽|
二进制grep
命令的特殊含义。
答案 1 :(得分:1)
从grep explained和手册页中提取。
变体程序egrep
与grep -E
相同。不推荐使用该变体,但提供该变体是为了向后兼容。
对正则表达式模式中的语法有两种解释。区别在于一些特殊字符?
,+
,()
,{}
和|
的行为。
\
为前缀。\
的 。 grep
提供了匹配器选择选项。
-E
将模式解释为扩展的正则表达式(ERE)
-G
将模式解释为基本正则表达式(BRE)。 这是默认设置。
答案 2 :(得分:1)
grep 和 egrep 的区别在于:
grep
grep 'a|b'
它不会使用这个“|”作为 OR 运算符而不使用此“\”前缀。egrep
egrep 'a|b'
答案 3 :(得分:0)
grep命令用于查找文件中需要patran的行,我们通过放置'\'
来分隔元字符egrep等于grep -E,扩展正则表达式使用{,},(,),|,?作为元字符而不在表达式中给出'\'
fgrep用于查找固定字符串,该字符串等于grep -F
test.txt
文件
瓷砖
(F | T)ILE
页(\ f \ | \ t)的异亮氨酸
grep“(f | t)ile”test.txt
(F | T)ILE
grep“(\ f \ | \ t)ile”test.txt
文件
瓦片
egrep“(f | t)ile”test.txt
文件
瓦片
egrep“(\ f \ | \ t)ile”test.txt
(F | T)ILE
fgrep“(f | t)ile”test.txt
(F | T)ILE
fgrep“(\ f \ | \ t)ile”test.txt
页(\ f \ | \ t)的异亮氨酸