2015-05-12 157 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

相關問題