2014-02-18 5 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" {} ";" 

Но я имею сообщение об ошибке (ошибка в паре {)

Я не могу найти хорошее синтаксис для этого. Я просто хочу, чтобы добавить круглую скобку в конце на все файлы ...

[править] Ok нашел ...

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

Используйте одинарные кавычки, а не двойные кавычки, чтобы избежать регулярных выражений и других язык программирования конструкция, которые вы передаете в командной строке с Баша ...

0

с простой цитатой и assuminf $ сервера является 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' 
Смежные вопросы