为什么在grep命令中的模式中使用单引号和\?

时间:2014-01-04 05:31:50

标签: grep

在某本书中,我看到了一个grep命令示例为

$ grep'^ no(fork \ | group)'/ etc / group

我需要解释“为什么在字符(|)之前使用单引号和\ _”。

2 个答案:

答案 0 :(得分:0)

在grep中使用单引号的好处是,当您需要为它们进行grep时,不需要转义双引号。例如,如果您想使用单引号搜索带有grep的"findthis"(包括搜索引号),它将如下所示:

grep '"findthis"' yourfile.txt

如果您使用双引号,则需要使用\来转义引号,因此它看起来像这样:

grep "\"findthis\"" yourfile.txt

搜索某些字符需要反斜杠的原因是grep假定这些字符具有特殊含义。例如,grep使用"来查找您要搜索的内容的开头和结尾(以及其他内容)。但这意味着除非有一些方法,否则你不能搜索"。解决方案是在\之前放置",如此:\"。如果你这样做,那么grep知道你确实想要搜索"而不是结束字符串。

答案 1 :(得分:0)

始终建议引用命令的参数。单引号不会扩展变量。在您的示例中,使用单引号或双引号没有什么不同。

举一个例子:

kent$  cat f
foo
bar
ooo

没有引用:

kent$  grep foo|bar f
zsh: correct 'bar' to 'bzr' [nyae]? n
zsh: command not found: bar

你知道,我的zsh认为你想管道输出到命令" bar"

现在为什么要逃避|

假设您的grep不是别名。 grep默认情况下使用BRE,在BRE中你需要转义一些字符以赋予它们特殊含义,|就是其中之一。

但是,您可以通过ERE选项让grep在PCRE-E, -P模式下工作。然后你不再需要逃脱这些炭了:

kent$  grep -E 'foo|bar' f
foo
bar

EREPCRE中,您可以逃避一些字符,以取消特殊含义。