簡體   English   中英

我如何grep帶有括號和引號的字符串?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM