подставить строку в php из другого файла - PullRequest
1 голос
/ 03 мая 2010

У меня есть несколько старых файлов php, которые я хотел бы конвертировать для использования gettext. эти файлы имеют такой контент:

$LD = 'Some String';
$Another = 'some other ~n~ string';

Я должен заменить все $ LD, $ Другой в файлах, где они объявлены, что-то вроде:

_('Some string');

немного взломав созданное некое регулярное выражение, чтобы найти объявления, моя цель состояла в том, чтобы использовать sed и awk для замены ... но я понятия не имею, как сделать эти замены ...

любая помощь ...

1 Ответ

1 голос
/ 03 мая 2010

Попробуйте:

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 для поиска содержимого в файлах кода.

В любом случае, особенно если вы используете опцию на месте, Я настоятельно рекомендую запускать тесты (и резервные копии).

...