如何使用grep查找包含特殊字符(如[])的字符串?

8

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

3个回答

18

你说得对,[] 是特殊字符。请使用 \ 进行引用或使用 fgrep 替代。后者是普通字符串搜索:

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

你仍然需要引用$,因为它会被bash和其他shell解析。


3
您可以使用-F或--fixed-strings指定要匹配的字符串列表。
grep -Frl "\$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']" /path/to/files 来自grep手册的内容: -F,--fixed-strings 将PATTERN解释为由换行符分隔的固定字符串列表中的任何一个字符串。 (POSIX指定了-F。)
fgrep已弃用,但可能仍可作为grep -F的替代品。

1
正如Maxim Yegorushkin所说,您需要转义$和[]字符。
grep -rl "\$GLOBALS\['TYPO3_CONF_VARS'\]\['SC_OPTIONS'\]" .

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接