如何 grep 查找包含 $ 和 ' 等正则表达式元字符的字符串?

如何 grep 查找包含 $ 和 ' 等正则表达式元字符的字符串?

我想搜索当前目录及下面的所有文件中的子字符串$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']

相关内容