2

我尝试用 perl 编写一个简单的东西,它遍历文件夹中的一堆文本文件,并从一组 3000 个不同的数字中删除不包含任何数字的每一行。

为了开始它,我尝试了

perl -ni.bak -e "print if /315879|315861|313956/" sometextfile.txt

到目前为止,这工作正常。现在的问题是,它不应该只测试三个数字,而是大约 3000。当我将它们全部放在上面的正则表达式中时,它似乎在某个点后被截断,并不是每个数字都在搜索。

我该如何解决这个问题?

虽然我们已经在使用它,但我如何在文件夹中的所有 *.txt 文件中迭代该行?

4

2 回答 2

3

您的 3000 个数字列表在实际 Perl 程序/脚本的上下文中应该可以正常工作。

但是,在您的问题中,您将其显示为从 shell 提示符在命令行上运行的单行程序,这意味着您的 shell 在将其提供给您的 Perl 解释器之前会截断该行。我不知道现代 shell 的典型最大行长是多少,但是 3000 个六位数字,加上用于正则表达式交替的管道,加起来最多 21,000 个字符,这可能比大多数 shell 默认允许的要长.

于 2013-07-03T11:30:46.203 回答
1

好的,这绝对不是 perl 问题,而是您使用的命令 shell。微软官方有一篇关于 Windows 系统限制的文章:http: //support.microsoft.com/kb/830473/en-us

但是,Unix / Linux 系统似乎对最大参数长度的限制要少得多(仍然取决于实际的内核或其他什么,您可以在 Google 上找到)。当我将我的代码传递给一个运行 MacOS 的朋友时,他可以毫无问题地将其粘贴到他的 shell 中并正确运行它。

所以我的解决方案是获取一些实时 Linux 发行版并在那里完成工作。不漂亮,但这对我有用。不过,如果有人找到可以在 Windows 下使用的解决方案,我将不胜感激,以满足未来的需求。

谢谢大家。

于 2013-07-03T21:09:47.067 回答