我想搜索当前目录及下面的所有文件中的子字符串$form['#node']
。所以,我最初尝试过:
grep -R "\$form\[\\\\'" .
和grep -R "\$form\[\'" .
但它没有返回任何结果。然而,
grep -R "\$form\["
返回大量结果,因为文件中存在诸如$form['#id']
或 之类的条目实例。$form['#node']
添加转义单引号是否会导致问题?在这种情况下,我似乎找不到任何明确的指示来说明如何转义单引号。
我需要检查我的转义字符在这种情况下是否按预期工作。
答案1
我认为如果您使用该开关,-F
您将指示grep
寻找固定字符串。
$ grep -F "\$form['#node']" file.txt
例子
样本文件。
$ cat file.txt
$form['#node']
abc$form['#node']abc
123$form['#node']123
blah blah $form['#node']
someotherstring
样品运行。
$ grep -F "\$form['#node']" file.txt
$form['#node']
abc$form['#node']abc
123$form['#node']123
blah blah $form['#node']
笔记:您仍然需要转义美元符号,$
因为包裹字符串的双引号很弱,并且不能防止 shell、Bash 认为这是一个变量名。
答案2
虽然这是您确实想要的情况使用-F
这里,唯一没有-F
这里的特殊字符是[
所以是唯一需要转义的字符为了grep
,$
需要对 shell 进行转义,但不需要转义,grep
因为虽然$
是正则表达式运算符,但它不处于该位置。[
是一个 shell 通配符,但不在双引号内
grep -r "\$form\['#node']" .
应该管用。当然,正如@slm 所指出的,没有理由不在-F
这里使用。
grep -Fr "\$form['#node']" .
(对于 GNU grep
(至少是其最新版本),-r
应该优先使用,-R
除非您确实打算遍历符号链接)。
答案3
这个怎么样?
egrep "\\\$form\['"
答案4
单引号在正则表达式中没有特殊含义,并且由于您的模式已经用双引号括起来,因此没有理由转义它们。由于它们不是特殊字符,因此转义它们不起作用,并且会破坏您的模式。
因此,您所需要的只是"\$form\['"
:
$ cat file.txt
$form['#node']
abc$form['#node']abc
123$form['#node']123
blah blah $form['#node']
someotherstring
$ grep "\$form\['" file.txt
$form['#node']
abc$form['#node']abc
123$form['#node']123
blah blah $form['#node']