2015-05-12 89 views
1

我想给grep在我的目录下:如何使用括号和引号来格式化字符串?

$form['#submit'][1] 

我试图逃避可能的字符,包括各种排列:

grep -r "$form\['#submit'\]\[1\]" ./* 
grep -r "$form\['#submit']\[1]" ./* 
grep -r "$form\['#submit']\[1]" * 
grep -r "$form\['#submit'][1]" * 
grep -r "$form\[\'#submit'][1]" * 
grep -r "$form\[\'#submit']\[1]" * 
grep -r "$form\[\'#submit\']\[1]" * 
grep -r "$form\[\'#submit\'\]\[1\]" * 
grep -r "\$form\[\'#submit\'\]\[1\]" * 
grep -r "$form\[\'#submit\'\]\[1\]" * 
grep -r "$form['#submit'][1]" ./* 

但似乎没有任何可以得到正确的术语。我如何grep这个表达?

回答

3

关于逃脱

基本上你只需要逃跑的字符,在BASIX POSIX正则表达式,其是一个意思:

  • $升完INE
  • [字符类的开始
  • ]字符类

末另外,你需要使用双引号,因为它包含单引号本身封闭模式。但在这种情况下,您需要双重转义$,因为它在shell的双引号(变量起始)内的正则表达式模式(行结束)内有意义。

grep -r "\\$form\['#submit'\]\[1\]" 

关于固定的字符串,而不是模式

在你需要知道的grep另一方面也能够搜索到固定的字符串,而不是正则表达式模式。你需要通过-F在这种情况下:

grep -rF "\$form['#submit'][1]" 

现在,进行转义只有$需求,因为庆典原本试图展开后续字符作为变量名。

0

需要引用$[]

测试

$ cat input 
$form['#submit'][1] 

$ grep "\$form\['#submit'\]\[1\]" input 
$form['#submit'][1] 

为什么?

  • $逃脱$在bash /壳的特殊意义和防止变量扩展

  • []转义的字符类的[特殊含义

较短方法

$ grep "\$form\['#submit']\[1]" input 
$form['#submit'][1] 

这里只开[被转义导致的孤独]任何occurence被当作普通字符没有特殊含义

4

我建议,以避免固定字符串搜索过度使用转义选项-F

grep -riF "\$form['#submit'][1]" . 

$仍需要逃避,因为整个字符串是在双引号。

+1

加上'-F'! (再次!我忘了!):) – hek2mgl

相关问题