Назад | Перейти на главную страницу

массовый текст perl заменить буквальным знаком доллара

пытаясь заменить текстовые шаблоны знаками доллара и () s, не могу заставить его работать. пожалуйста помоги

find /var/www/vhosts/prod/xxx/  -name "*.php"|xargs perl -w -i -p -e "s/mysql_fetch_array\($res,MYSQL_ASSOC\)/mysql_fetch_assoc(\$res);/g"

Я подозреваю, что ваша оболочка расширяется $res. Чтобы этого избежать, заключите регулярное выражение в одинарные кавычки.

Чуть более эффективный вариант без xargs и perl:

find /var/www/vhosts/prod/xxx/ -name "*.php" -exec sed -i 's/mysql_fetch_array($res,MYSQL_ASSOC)/mysql_fetch_assoc($res);/g' {} \+

Вам также необходимо экранировать символы $, (и) в регулярном выражении поиска, вы уже правильно экранировали $ в строке замены.

В Perl 5.10.1 я должен использовать параметр -i.bak, чтобы это работало, иначе переключатель редактирования на месте жалуется, что у меня нет резервной копии.

find /var/www/vhosts/prod/xxx/ -name "*.php"|xargs perl -w -p -i.bak -e "s/mysql_fetch_array\(\$res,MYSQL_ASSOC\)/mysql_fetch_assoc(\$res);/g"