我的 perl-grep 语句没有捕获大匹配(约 32k 个字符)的所有元素,但对于较小的匹配没有问题。
我想使用 grep 命令来获取“允许的 [< TEXT > ]”:
grep -P '(?si)^\s*allowed\s*\[.*?\]' file.txt
出于某种原因,如果文件很大,点会停止匹配行。因此,上面的 grep 不匹配任何内容,因为 '.*?\]' 不能吃到足够的东西来找到 ']'。
grep -P '(?si)^\s*allowed\s*\[.*' bigFile.txt | wc
1883 1883 32764
但它仍然可以使用 .* 消耗整个文件:
grep -P '(?si).*' bigFile.txt | wc
10003 10003 178910
大文件.txt:
allowed
[
com.bar.baz1
com.bar.baz2
....
com.bar.baz10000
]
如您所见,BigFile 应该完全匹配。相反,它在大约 32k 个字符后停止,大约在第 1880 行。
我正在使用 Grep2.5.1。我最好的猜测是这个版本的 grep 只能匹配模式中的大约 2^15=32768 个字符......
作为比较,在另一台运行 grep 2.6.3 的机器上,以下工作正常
grep -Pzo '(?si)^\s*allowed\s*\[.*?\]' bigFile.txt