我如何grep的特殊字符,如的string?

我试图find所有文件都有文本: $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS'] ,我试图使用grep -rl '$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']' . ,但后来发现[]具有特殊的含义作为search模式。 那么search文本$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']的正确命令是什么?

你是对的, []是特殊字符。 引用他们\或使用fgrep来代替。 后者是纯字符串搜索:

 fgrep "\$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']" ... 

你仍然需要引用$因为它是由bash和其他shell解释的。

正如Maxim Yegorushkin所说,你必须逃避$和[]字符。

 grep -rl "\$GLOBALS\['TYPO3_CONF_VARS'\]\['SC_OPTIONS'\]" . 

您可以使用-F或–fixed-strings来指定要匹配的字符串列表。

grep -Frl "\$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']" /path/to/files

从grep的手册页:

-F,–fixed-strings将PATTERN解释为由换行符分隔的固定字符串的列表,其中任何一个将被匹配。 (-F由POSIX指定)

fgrep已弃用,但仍可作为grep -F的替代选项。