[英]How can I grep a string with brackets and quotes?
我正在嘗試在目錄中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這個表達式?
我建議避免對固定字符串搜索過度轉義使用-F
選項:
grep -riF "\$form['#submit'][1]" .
$
仍然需要轉義,因為整個字符串都用雙引號引起來。
關於轉義
基本上,您只需要轉義在basix posix正則表達式中具有含義的字符,即:
$
行尾 [
角色課開始 ]
人物類結束 另外,由於模式本身包含單引號,因此您需要使用雙引號將模式括起來。 但是在這種情況下,您需要對$
進行兩次轉義,因為$
在shell的雙引號(變量的開始) 和 regex模式(行的結尾)內具有含義。
grep -r "\\$form\['#submit'\]\[1\]"
關於固定字符串而不是模式
另一方面,您需要知道grep還能搜索固定的字符串而不是正則表達式模式。 在這種情況下,您需要傳遞-F
:
grep -rF "\$form['#submit'][1]"
現在,只需要轉義$
,因為bash否則會嘗試將后續字符擴展為變量名。
您需要引用$
[
和]
測試
$ cat input
$form['#submit'][1]
$ grep "\$form\['#submit'\]\[1\]" input
$form['#submit'][1]
為什么呢
$
避開bash / shell中$
的特殊含義並防止變量擴展
[
和]
逃避[
人物類的特殊含義。
更短的方法
$ grep "\$form\['#submit']\[1]" input
$form['#submit'][1]
在這里,只有開頭[
被轉義,導致出現孤行]
被視為正常字符,沒有特殊含義
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.