perl -pi.bak -e 's/\r\n$/\n/' xxx.sql 为什么在win下不好用???

perl -pi.bak -e 's/\r\n$/\n/' xxx.sql 为什么在win下不好用???

如题。

在windows下装了perl 5.8.0,现在要把一些文本文件转成unix格式的。
可是用s/\r\n$/\n/后却不起作用,式了n次都不好用,太奇怪了,请
教各位大侠。

我可以传到unix下处理,但是就是想不明白为什么在windows下不好用。
why???


----------------------------------------------------------
原因找到了,见12楼。

老问题了, -i .bak这个参数在win下没用,只能忍。
要不就写个pconv.pl之类的脚本,然后pconv 's///g' xxx.sql也行。


QUOTE:
原帖由 jigloo 于 2007-8-13 17:12 发表
老问题了, -i .bak这个参数在win下没用,只能忍。
要不就写个pconv.pl之类的脚本,然后pconv 's///g' xxx.sql也行。

谢谢你的回复,但是并不是-i的原因。

1. -i.bak在win下可以用,有备份文件.bak生成,问题在于s/\r\n/\n/没起作用:0d0a依旧。

2. 你说的方法我也试了,相同的问题:处理完之后,行尾还是0d0a
windows 下不能用单引号吧?


QUOTE:
原帖由 flw 于 2007-8-13 18:11 发表
windows 下不能用单引号吧?

可以吧,运行没报错。

关键是我写到文件里也没起作用,郁闷;不知道到底哪里出了问题。
下面是代码片段:

[Copy to clipboard] [ - ]
CODE:
        rename("$filename","$filename.bak");
        open INPUT, "$filename.bak";
        open OUTPUT, ">$filename";

        while( <INPUT> ) {
            s/\r\n$/\n/;     # convert CR LF to LF
            print OUTPUT $_;
        }

        close INPUT;
        close OUTPUT;
        unlink("$filename.bak");

________________________________________________________
我用 s/$/kkk/ 可以生效; 我想可能是我装的perl不能正确识别\r\n吧,,,



QUOTE:
原帖由 yjh777 于 2007-8-13 18:22 发表

可以吧,运行没报错。

关键是我写到文件里也没起作用,郁闷;不知道到底哪里出了问题。
下面是代码片段:

        rename("$filename","$filename.bak");
        open INPUT, "$filename.bak";
    ...

Windows下好像要用双引号才行的. 单引号不被视为字符串分界. 你改成双引号试试?


QUOTE:
原帖由 galaxywar 于 2007-8-13 19:27 发表

Windows下好像要用双引号才行的. 单引号不被视为字符串分界. 你改成双引号试试?

双引号也不行,不知道为什么,匹配不上 \r


QUOTE:
原帖由 yjh777 于 2007-8-27 18:31 发表

双引号也不行,不知道为什么,匹配不上 \r

这个和 $/ 有关。


QUOTE:
原帖由 flw 于 2007-8-27 18:33 发表

这个和 $/ 有关。

试过很多种情况,不带$的也试过
s/\r\n/\n/;  命令行和写到文件里都不行,后来才加$试的。


QUOTE:
原帖由 yjh777 于 2007-8-27 18:41 发表

试过很多种情况,不带$的也试过
s/\r\n/\n/;  命令行和写到文件里都不行,后来才加$试的。

perldoc perlvar
找 $/