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

标签 regex perl

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

为了开始它,我尝试了

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

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

我该如何解决这个问题?

虽然我们已经做到了这一点,但我如何在文件夹中的所有 *.txt 文件上迭代该行?

最佳答案

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

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

关于regex - 删除文本文件中与大量短语中的任何短语匹配的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17445356/

相关文章:

regex - 关闭贪婪在此正则表达式中不起作用

regex - float - 正则表达式

带有 ng-if 的正则表达式

perl - 在 Perl 中将字符串中的十六进制数字转换为负数

python - Python 中 Perl 的 BEGIN{} block

perl - 如何在测试中避免 "You tried to plan twice"::More

php - preg_match 名字/姓氏匹配组

javascript正则表达式来获取始终跟随城市和逗号的2个字符的状态

perl - 在使用 WWW::Mechanize 获取 <td> 标记内的 <a> 时获取 <td> 文本

javascript - CGI 程序可以将控制权返回到弹出窗口而不是父屏幕吗