웹 사이트 마이그레이션을 위해 SQL 덤프 안에 fqdn을 교체해야합니다. 나는 STDIN을 취하고 대체되어야하는 도메인 이름을 포함하는 직렬화 된 문자열을 대체하고 스크립트에 전달되는 모든 인수로 바꾸고 STDOUT으로 출력해야하는 펄 필터를 작성했습니다. 필터 (이이 워드 프레스 덤프에서 가져온 것입니다,하지만 우리는 또한 드루팔을 수용하기로하고 다음과 같이 보일 수 있습니다 데이터를 전달됩니다 perl은 SQL 덤프에서 직렬화 된 문자열을 대체합니다.
my $search = $ARGV[0];
my $replace = $ARGV[1];
my $offset_s = length($search);
my $offset_r = length($replace);
my $regex = eval { "s\:([0-9]+)\:\\\"(https?\://.*)($search.*)\\\"" };
while (<STDIN>) {
my @fs = split(';', $_);
foreach (@fs) {
chomp;
if (m#$regex#g) {
my ($len, $extra, $str) = ($1, $2, $3);
my $new_len = $len - $offset_s + $offset_r;
$str =~ eval { s/$search/$replace/ };
print 's:' . $new_len . ':' . $extra . $str . '\"'."\n";
}
}
}
덤프
:이
내가 지금까지 무엇을 가지고 내$search
에 마침표가없는 경우
INSERT INTO `wp_2_options` VALUES (1,'siteurl','http://to.be.replaced.com/wordpress/','yes'),(125,'dashboard_widget_options','
a:2:{
s:25:\"dashboard_recent_comments\";a:1:{
s:5:\"items\";i:5;
}
s:24:\"dashboard_incoming_links\";a:2:{
s:4:\"home\";s:31:\"http://to.be.replaced.com/wordpress\";
s:4:\"link\";s:107:\"http://blogsearch.google.com/blogsearch?scoring=d&partner=wordpress&q=link:http://to.be.replaced.com/wordpress/\";
}
}
','yes'),(148,'theme_175','
a:1:{
s:13:\"courses_image\";s:37:\"http://to.be.replaced.com/files/image.png\";
}
','yes')
정규식 작동합니다. 내가 즉 domain\.to\.be\.replaced
기간을 탈출 시도했습니다,하지만 그건. 아마 매우 로터리 속에서 이것을하고있어 작동하지 않았다 방법이나 명백한 무언가를 놓치기. 어떤 도움이 될 greatl y는 인정했다.