我的perl-grep语句没有捕获大型匹配的所有元素(~32k字符),但是对于较小的匹配没有问题。
我想使用grep命令来获取“allowed [< 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
BigFile.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
答案 0 :(得分:1)
您在一个命令中使用非贪婪的运算符:
grep -P '(?si)^\s*allowed\s*\[.*?\]' file.txt
^^
和另一个贪婪的操作员:
grep -P '(?si)^\s*allowed\s*\[.*' bigFile.txt | wc
^
这可能会导致grep
与您的文件匹配的方式不同。