请教正则表达式匹配问题。

请教正则表达式匹配问题。

小妹是个perl菜菜鸟,我在实现一个SQL文件替换时出现错误,找了很多资料也想不明白为什么,请大家帮忙看看。
我想把一个SQL文件中的所有的“http://www.aaaa.com”全部替换成“http://www.bbbb.com”,我自己随便新建一个文本文件测试是可以正常替换的,但是在用到这个SQL文件就有三个地方错误不知道为什么,因为这个sql文件里面有很多奇怪的符号。错误如下:
sh: br: NO such file or directory
> sh: b:1: command not found
> sh: }),(4,1,wp_user_level,10);: command not found
部分源代码如下:
#sql
$datafile=$directory.'blog_db.sql';
#print "$datafile\n";
open (SQL,"$datafile") or die "can't open blog_db.sql$!\n";
foreach $_(<SQL>){
chomp;
$url='http://www.bbbb.com';
s/\bhttp\:\/\/www\.aaaa\.com\b/$url/gim;

不知道还需要提供什么信息,请帮忙!  谢谢!

直接用UltraEdit就好了,可以替换一个目录下所有文件
不是,可能我没有说清楚,我只有一个文件blog_db.sql里面的某些内容需要全局替换,但是在替换的时候可能是因为里面含有很多特殊的符号的原因,匹配的时候出现了错误. 是不是需要在正则表达式后面加上什么参数之类的??,请指教  因为是要写出来给非专业人用的,所以只能用perl实现,让别人直接加参数运行.
1. 从错误提示看, 貌似perl script外面有一层shell script的wrapper. 根本没涉及到perl的执行.

2. .SQL是二进制格式, 若按文本方式来处理(比如单纯的增加中间字符串长度), 很可能破坏整体结构.
     你可以尝试用任意编辑器的文本模式手工修改一处. 若修改后的文件工作正常, 则可以用文本方式来处理.

用vi编辑器 :g/www.aaaa.com/s//www.bbbb.com/g 可以成功替换, 可以以文本方式来处理.
就是当使用perl programe的时候会出现错误, 我是在linux里实现的perl. 运行以后SQL文件由原来的200K变为了11K,很明显文件被改变了.
错误提示中的xxxx: command not found 中的xxxx都是SQL中的内容, 不明白为什么没有将它们做为替换关键字却会出现错误. 好郁闷哦
你的#print "$datafile\n"; 去掉注释能打出来吗?

另: open不好编辑原文件, 只能append或重写.  而且你的写法.....

试下看, 请先备份原文件

    use Tie::File;

    tie my @lines, 'Tie::File', $datafile or die "Cannot open $datafile: $!\n";
   
    my $url_old   = 'http://www.aaaa.com';
    my $url_new = 'http://www.bbbb.com';
   
    foreach (@lines) {
        $_ =~ s/$url_old/$url_new/gim;
    }
   
    untie @lines;
可以考虑用sed。
Hi lonki, 用你的方法现在可以了,非常感谢!   我以后要多多向大家学习!