我需要清理一个包含 PHP 序列化值的 mysql 转储(我使用 sed 搜索/替换 url)
在 PHP 中,我会这样做:
<?php
$ret_string = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.mb_strlen('$2').':\"$2\";'", $string );
?>
你会如何在 bash 中做到这一点?
示例原始字符串:
a:3:{s:7:"string1";s:4:"test";s:3:"url";s:17:"http://myurl.com";s:7:"string2";s:4:"test";}
我已经用 mynewurl.com 替换了 myurl.com,所以它现在看起来像:
a:3:{s:7:"string1";s:4:"test";s:3:"url";s:17:"http://mynewurl.com";s:7:"string2";s:4:"test";}
我需要更改的是字符串的长度以反映新字符串的长度(s:17),以便最终字符串变为:
a:3:{s:7:"string1";s:4:"test";s:3:"url";s:19:"http://mynewurl.com";s:7:"string2";s:4:"test";}
我的 sql 转储中有很多这些,它是文件系统上的一个文件。虽然域已经改变,但url可能有一个额外的路径,因此不同的字符串长度