Попробуйте:
sed -r $'s/(\$LD = )(\'.*\')(.*)/\\1_(\\2)\\3/' filename
Пример:
$ echo "\$LD = 'Some String';" | sed -r $'s/(\$LD = )(\'.*\')(.*)/\\1_(\\2)\\3/'
$LD = _('Some String');
Редактировать:
Это будет искать и изменять обе переменные,-i
сделает изменение на месте:
sed -i -r $'s/(\$(LD|Another) = )(\'.*\')(.*)/\\1_(\\3)\\4/'
Вы можете перечислить больше имен переменных, разделенных символами канала.
Ваша команда grep
нуждается в одинарных кавычках вместо обратных кавычек и-E
для использования расширенных регулярных выражений.Это также нуждается в файле specpec.Регулярное выражение, как у вас, в основном говорит: «Есть ли в этом файле определения переменных?»Он говорит, что нужно искать любую переменную, которая:
- начинается с начала строки без пробелов до того, как
- имеет ноль или более индексов массива, состоящих из нуля или более цифр (чтобудет включать нулевой индекс, то есть добавление к массиву)
- игнорировать любые присвоения ассоциативных массивов (
$array["key"]=value
) - строка должна заканчиваться точкой с запятой
- Я неуверен, что
?
предназначен для
Это не удастся, если присвоение переменной:
- происходит после некоторого пробела
- , использующего буквенный ключ илипеременная в качестве ключа
- встречается в строке с другими операторами
- имеет любые пробелы
- возможно, другие
Возможно, вам придется сделатьВаше регулярное выражение более надежное или простое, или просто предполагайте, что любой файл PHP будет иметь присвоение переменной, и пусть sed
ищет и изменяет только интересующие переменные.
Для того, чтобы ваш grep
имел файлы дляпроцесс, вам нужно указать шкакие файлы посмотреть:
grep -E -i -R 'your regex' * | sed ...
Или, если вы позволите sed
сделать это:
find . -name "*.php" | sed ...
Кроме того, инструмент под названием ack
лучше, чем grep
для поиска содержимого в файлах кода.
В любом случае, особенно если вы используете опцию на месте, Я настоятельно рекомендую запускать тесты (и резервные копии).