【发布时间】:2018-03-13 04:47:35
【问题描述】:
我使用这个 Perl 命令来删除数据库转储的块。它从包含字符串TABLE DATA; Schema: pgq; 的注释行开始,稍后以字符序列\. 本身在一行结束。删除所有匹配项。
perl -p0e 's/\n--[^\n]*TABLE DATA; Schema: pgq;.*?\n\\\.\n//gs'
这有效,除非处理由于perl bug that's been fixed in 5.22 而导致的大于几千兆字节的数据库转储。我被困在 Perl 5.18 (Ubuntu 14.04) 上,升级不是一个选项。
我正在考虑使用 awk 和 -vRS 和 -vORS 变量以及可能的 gsub 运算符重写 Perl 表达式,但我似乎找不到任何适用于我的用例的示例。使用 awk 是否有可能?
我正在使用GNU Awk 4.0.1。
【问题讨论】:
-
为什么不在你的 HOME 目录中安装一个新的 perl 呢?
-
不幸的是,这是在没有 Internet 访问权限的服务器上,所以我必须使用我所拥有的。正如我所提到的,升级 Perl 不是一种选择。我正在寻找解决方法。
-
如果您edit 您的问题包含简洁、可测试的样本输入和预期输出,您将更有机会获得正确答案。包括难以处理的案件,而不仅仅是晴天的案件。是的,它只是软件,所以一切皆有可能。
-
.*?\n\\\.\n应该是(?:(?!\n\\\.\n).)*+\n\\\.\n。您可以通过将其替换为(?:(?:(?!\n\\\.\n).){65535})*+(?:(?!\n\\\.\n).)*+\n\\\.\n来绕过限制