如何使用[]这样的特殊字符来搜索字符串?

时间:2013-08-14 09:12:43

标签: linux grep

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

3 个答案:

答案 0 :(得分:13)

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

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

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

答案 1 :(得分:2)

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

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

From the man page for grep:

  

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

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

答案 2 :(得分:1)

正如马克西姆·叶戈鲁什金所说,你必须逃避$和[]字符。

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