2014-02-18 41 views
0

我想這個sed將替換字符串:桑達問題(正則表達式語法)

find . -type f -name "*.php" -exec sed -i "s|\!preg_match(\"\!modules\.php\!\", \\\$_SERVER\['PHP_SELF'\]) \{|\!preg_match(\"\!modules\\\.php\!\", \\\$_SERVER\['PHP_SELF'\])) \{|g" {} ";" 

但我(在配對{錯誤)

我找不到好已經一個錯誤信息語法來做到這一點。我只是想在所有文件的最後添加一個圓形支架...

[編輯] 好的發現...

find . -type f -name "*.php" -exec sed -i "s|\!preg_match(\"\!modules\\\.php\!\", \\\$_SERVER\['PHP_SELF'\]) {|\!preg_match(\"\!modules\\\.php\!\", \\\$_SERVER\['PHP_SELF'\])) {|g" {} ";" 
+2

我算3倍{我算1次}你應該有3個右括號 – lordkain

回答

0

使用單引號,而不是雙引號逃脫正則表達式和其他編程語言結構,你通過從bash的命令行上...

0

簡單的報價和assuminf $ SERVER是litteral

sed -i 's|!preg_match("!modules\.php!", \$_SERVER\['"'"'PHP_SELF'"'"'\]) {|!preg_match("!modules\.php!", \$_SERVER\['"'"'PHP_SELF'"'"'\])) {|g' 

我刪除!,正常!應通過無逃生

我還建議簡化

sed -i 's|\(!preg_match("!modules\.php!", \$_SERVER\['"'"'PHP_SELF'"'"'\])\) {|\1) {|g'