2015-02-12 174 views
-1

我試圖查找/替換在遍佈目錄樹的許多文件中找到的字符串。查找/替換爲sed會產生意想不到的結果

我以爲我會用sed來完成這個任務。

find /some/dir -name \*.php -exec sed -i "s/cybernetnews/cybernet/g" {} \; 

這個工作過程與樣本串預期「cybernetnews」,但事情變得奇怪,當我嘗試查找/替換針對此字符串:

preg_match($_SESSION['infos']['num'], $numeric_variable) 

哪裏要替換字符串$_SESSION['infos']['num']常數INFOS_NUM

所以,我想這會工作:

find /some/dir -name \*.php -exec sed -i "s/$_SESSION['infos']['num']/INFOS_NUM/g" {} \; 

沒有運氣,這裏是顯示在測試PHP文件運行上面的命令後:

preg_match($_SESSION['INFOS_NUMfoINFOS_NUM][INFOS_NUMum'], 
      $INFOS_NUMmeric_variable) 

我試圖逃避單引號,但得到完全相同的結果。如果我逃過支架,則不做任何更改。

什麼字符是sed掛掉了,我該如何正確地逃脫它?

+0

可能重複的[桑達 - 具有可變充滿怪異字符替換的字符串](http://stackoverflow.com/questions/21535046/sed-replacing-a-string-with-a-variable-全怪的字符) – NeronLeVelu 2015-02-12 06:47:09

+0

請解釋downvote。 – 2015-02-12 18:41:38

+0

對不起,不是我的 – NeronLeVelu 2015-02-13 06:59:50

回答

2

$, [, ]是正則表達式中的特殊字符,您必須在正則表達式中轉義該字符才能逐字匹配這些字符。要進行不區分大小寫的匹配,最後需要添加i修飾符。

find /some/dir -name \*.php -exec sed -i "s/\$_SESSION\['infos'\]\['num'\]/INFOS_NUM/g" {} \; 
+1

爲了補充說明,'$'也是一個特殊字符。它在代碼段中正確轉義,但沒有提及。 – Agop 2015-02-12 00:45:16

相關問題