删除与大量短语中的任何短语匹配的文本文件中的行

时间:2013-07-03 10:17:00

标签: regex perl

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

为了开始,我尝试了

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

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

我该如何解决这个问题?

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

然而,Unix / Linux系统似乎对最大参数长度的限制要少得多(仍取决于实际的内核或其他任何东西,你可以在谷歌上找到它)。当我将代码传递给运行MacOS的朋友时,他没有问题将其粘贴到shell中并正确运行。

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

谢谢大家。