繁体   English   中英

使用grep时引用?

[英]Quotes when using grep?

Grep的行为取决于我围绕正则表达式的引号类型。 我似乎无法清楚地理解为什么会这样。 以下是问题的示例:

hamiltont$ grep -e show\(  test.txt 
  variable.show();
  variable.show(a);
  variable.show(abc, 132);
  variableshow();
hamiltont$ grep -e "show\("  test.txt 
grep: Unmatched ( or \(
hamiltont$ grep -e 'show\('  test.txt 
grep: Unmatched ( or \(

我只是假设有一些正确的方法用单/双引号括起正则表达式。 有帮助吗?

FWIW, grep --version返回grep (GNU grep) 2.5.1

包含参数的命令行在执行之前由shell处理。 您可以使用echo来查看shell的功能:

$ echo grep -e show\(  test.txt 
grep -e show( test.txt

$ echo grep -e "show\("  test.txt 
grep -e show\( test.txt

$ echo grep -e 'show\('  test.txt 
grep -e show\( test.txt

所以没有引号就会删除反斜杠,使得“(”是grep的普通字符(grep默认使用基本的正则表达式,使用-E使grep使用扩展的正则表达式)。

为了:

grep -e show( test.txt

不起作用,因为shell解释(特殊的,括号,而不仅仅是一个字符,并且无法找到结束)

这两个都有效:

grep -e 'show(' test.txt
grep -e "show(" test.txt

因为shell将引用的文本视为文本,并将其传递给grep。

这些不起作用:

grep -e 'show\(' test.txt
grep -e "show\(" test.txt

因为shell传递show\\(到grep,grep看到\\(作为特殊的,括号,而不仅仅是一个字符,并且找不到结束\\)

引号改变了grep看到的内容。 未引用形式的反斜杠(\\)由shell处理,它将反斜杠后的字符视为特殊字符。 这在grep获取参数之前发生。 grep看show( 。当使用引号(单引号或双引号)时,shell将它们解释为“单独保留内容”,因此grep看到show \\(\\(字符在grep中有意义,它正在寻找结束)括号 - \\)。

BTW:单引号和双引号处理在shell处理shell变量的方式上有所不同,但在您的示例中没有shell变量。

我不相信它是表现不同的grep,它是shell。 我假设你正在使用bash

http://www.faqs.org/docs/bashman/bashref_8.html

基本上,引用的版本在斜杠上的行为有所不同,具体取决于引用机制。

两个引用的例子都可以在没有斜线的情况下工作。 对于第一个,shell将逃脱(并传入刚显示(到模式的grep)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM