如果这是一个新手问题,我很抱歉。 我不是一个Perl开发人员,但是正在尝试在自动化过程中使用它,而且我遇到了一些麻烦。
以下命令在我的Linux系统(Ubuntu 9.10 x64,Perl 5.10)上快速运行(几秒钟),但在Windows系统(Windows 2003 x86,Strawberry Perl 5.12.1.0)上运行速度非常慢。
perl -pe 's/\x00\x42\x00\x11/\x00\x42\x00\xf0/sgx' inputfile > outputfile
查找/replacehex字符的模式旨在修复大小在500MB到2GB之间的EBCDIC托架控制字符。 我不确定这是否是最有效的方式,但是这似乎是一个窍门……只要它能在Windows系统上快速运行,就需要运行。
有什么想法吗?
请注意,Windows上的文本和二进制文件是有区别的。 文本文件是自动EOL转换,我认为可能会增加到运行时间以及可能搞乱你的二进制替换(大概不是这里的情况下)。
另外,使用/sx
这个替换没有意义。
我认为问题的核心在于:使用-p
开关,你应该逐行处理输入。 文件中的第一个EOL(由perl
理解)在哪里? 你想读一个巨大的字符串到内存中,做s///
写出来?
如何使用以下脚本:
#!/usr/bin/perl use strict; use warnings; $/ = "\x00\x42\x00\x11"; $\ = "\x00\x42\x00\xf0"; while ( <> ) { chomp; print; }
另外,你绝对需要在Windows上使用双引号。 比较和对比:
C:\ Temp> perl -pe's / perl / merl /'t.pl #!的/ usr / bin中/ perl的 ...
C:\ Temp> perl -pe“s / perl / merl /”t.pl #!/ usr / bin / merl ...