Скрипт Bash для изменения сериализованных данных PHP - PullRequest
2 голосов
/ 09 января 2012

У меня есть много файлов, содержащих сериализованные данные php, в которых я должен заменить некоторые строки другой. На хосте linux не установлен ни один php. Проблема заключается в корректировке измененной строки до правильного размера.

Я пытался что-то вроде заменить / поделиться путем к / opt:

sed -re 's~s:([0-9]+):"/share([^"]*)~s:int(\1-2):/opt\2~g' file

но файл результатов неверен: длины - это буквальное выражение int (размер - 2)

Есть идеи?

1 Ответ

2 голосов
/ 09 января 2012

Это решение не идеально, но вы можете использовать perl:

my $line;
while ($line = <STDIN>) {
    $line =~ s~s:([0-9]+):"/share([^"]*)~"s:".($1-2).":\"/opt$2"~ge;
    print $line;
}

Надеюсь, я правильно понял ваши требования. Вот пример:

php -r 'echo serialize(array("/share/foo")) . "\n";'
a:1:{i:0;s:10:"/share/foo";}

php -r 'echo serialize(array("/share/foo")) . "\n";' | perl replace.pl
a:1:{i:0;s:8:"/opt/foo";}

РЕДАКТИРОВАТЬ : Вот модифицированный скрипт для редактирования файла на месте с помощью поиска переменных и замены строк .

...