Regex 在大文件上使用perl正则表达式时出现分段错误

Regex 在大文件上使用perl正则表达式时出现分段错误,regex,perl,segmentation-fault,Regex,Perl,Segmentation Fault,我试图找到并替换一个非常大的文件(43Go)上的模式,并面临一些问题。我第一次尝试使用sed来实现这一点,但它似乎没有针对大文件进行优化,甚至比43 Go还要小,所以我切换到perl 我有这个命令: perl-0777-i-pe's/(public\..)\u seq/\1\u id\u seq/mg'dump.sql 但它在退出之前会生成一个分段错误,并将我的转储文件43转为0八位字节文件。我试图解析的文件是一个简单的postgresql数据库转储 作为信息: # perl --version

我试图找到并替换一个非常大的文件(43Go)上的模式,并面临一些问题。我第一次尝试使用sed来实现这一点,但它似乎没有针对大文件进行优化,甚至比43 Go还要小,所以我切换到perl

我有这个命令:
perl-0777-i-pe's/(public\..)\u seq/\1\u id\u seq/mg'dump.sql

但它在退出之前会生成一个分段错误,并将我的转储文件43转为0八位字节文件。我试图解析的文件是一个简单的postgresql数据库转储

作为信息:

# perl --version

This is perl 5, version 26, subversion 1 (v5.26.1) built for x86_64-linux-gnu-thread-multi
(with 67 registered patches, see perl -V for more detail)

是否有人已经面临这个问题,或者对如何解决这个问题有任何想法?我更愿意保留这一行python命令,但如果您有任何其他程序的解决方案,我也会使用它

-0777
告诉perl将整个文件加载到内存中(请参阅)。如果你的内存不足43 Go(不管是什么),你就必须找到一种方法,把它分成小块处理。例如,尝试转储该选项,或对“段落模式”使用
-00


还要注意的是,与sed不同,在Perl中的替换部分中需要使用
$1
而不是
\1

-0777
告诉Perl将整个文件加载到内存中(请参阅)。如果你的内存不足43 Go(不管是什么),你就必须找到一种方法,把它分成小块处理。例如,尝试转储该选项,或对“段落模式”使用
-00


还要注意的是,与sed不同,在Perl替换的替换部分中,需要使用
$1
而不是
\1

非常感谢-00是解决方案!关于$1而不是\1,你确定吗?因为运行与以前相同的命令,并且只将-0777更改为-00,所以该模式可以正常工作。还有一点让我有点惊讶的是,这只是一个内存问题,因为我在250 Go RAM服务器上运行它。@PopHip--在perlre文档中有一个关于\1而不是$1的警告。@PopHip--检查服务器的配置,一个进程可以分配多少内存。字符串是43 GiB,但很容易会有20%的开销。您可以指望至少有一个副本在内存中(在重新分配期间,在替换期间)。现在我们讨论的是2份103 GiB或3份155 GiB。好吧,不是250,但越来越近了。。。(还请注意,您需要足够的磁盘空间来容纳原始版本和修改后的版本。)00是解决方案,非常感谢!关于$1而不是\1,你确定吗?因为运行与以前相同的命令,并且只将-0777更改为-00,所以该模式可以正常工作。还有一点让我有点惊讶的是,这只是一个内存问题,因为我在250 Go RAM服务器上运行它。@PopHip--在perlre文档中有一个关于\1而不是$1的警告。@PopHip--检查服务器的配置,一个进程可以分配多少内存。字符串是43 GiB,但很容易会有20%的开销。您可以指望至少有一个副本在内存中(在重新分配期间,在替换期间)。现在我们讨论的是2份103 GiB或3份155 GiB。好吧,不是250,但越来越近了。。。(还要注意,您需要足够的磁盘空间来存放原始版本和修改后的版本。)