在某本书中,我看到了一个grep命令示例为
$ grep'^ no(fork \ | group)'/ etc / group
我需要解释“为什么在字符(|)之前使用单引号和\ _”。
答案 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
在ERE
或PCRE
中,您可以逃避一些字符,以取消特殊含义。