gpt4 book ai didi

windows - 如何使用 Perl 快速修复大文件中的 EBCDIC 控制字符?

转载 作者:可可西里 更新时间:2023-11-01 11:39:32 24 4
gpt4 key购买 nike

如果这是一个新手问题,我深表歉意。我不是 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

查找/替换十六进制字符的模式旨在修复大小在 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...

关于windows - 如何使用 Perl 快速修复大文件中的 EBCDIC 控制字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3824789/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com