使用grep搜索带有单引号的文本?


14

我在ubuntu 12.04中使用带有嵌入式终端的gedit文本编辑器。我正在尝试使用来搜索一些文本grep。我想搜索这一行代码

'type' => 'select'

我试过了:

grep -r '\'type\' => \'select\''

但是grep没有返回任何结果。

那么有人可以告诉我如何搜索上面的代码吗?

Answers:


17

用双引号括住您的搜索字符串:

grep "'type' => 'select'"

7

您不能转义出现在单引号中的单引号。如[bash手册]中所述:( http://www.gnu.org/software/bash/manual/bashref.html#Single-Quotes):

将字符括在单引号(''')中可保留引号内每个字符的字面值。即使在单引号前面加上反斜杠,也不能在单引号之间引起单引号

因此,您必须使用不同的方法:

  1. 使用双引号:

    grep  "'type' => 'select'" file 
    
  2. 如果您喜欢不必要的复杂解决方案:

    grep  "'"type"'"\ =\>\ "'"select"'" file 
    
  3. 您始终可以搜索任何单个字符,而不必指定单引号:

    grep  '.type. => .select.' file 
    

但是只需使用",它会使事情变得更加简单。


如果我要搜索的字符串在php文件中并且包含变量怎么办?我真的很努力与此。
奥布里·罗伯逊

@AubreyRobertson我需要一个例子来正确回答。如果要查找类似string的内容$var,则可以grep '$var' file.php用单引号引起来。有关更多详细信息,请发布新问题并在此处给我评论。我很乐意提供帮助。
terdon's

我想到了。不是美元符号在困扰我的grep,而是数组引用(方括号),因为grep使用的是正则表达式。这是我要尝试$output = $info['function']($variables); 重复的行:我只需要用双反斜杠正确地转义它们即可。毕竟,这是我的grep命令:targetstring="\$output = \$info\\['function'\\](\$variables);" targetlinenumber=`grep -n "$targetfile" -e "$targetstring" | cut -d :f 1`
奥布里·罗伯逊

1

cd到包含您的.txt文件的目录

cd /path 

然后 :

您可以使用 grep "'type' => 'select'" name.txt

要么 :

`grep "'type' => 'select'" /path/file.txt

输出:

在此处输入图片说明


3
问题仅涉及单引号,而不涉及目录结构或grep的其他任何(略微无关)功能。
2014年

实际上,@ Chris具有该-r选项(如OP所写),则不需要文件名。
Brady Trainor 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.