0
我的perl-grep語句不捕獲大匹配(~32k字符)的所有元素,但對於較小的匹配沒有問題。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
BigFile.txt:
allowed
[
com.bar.baz1
com.bar.baz2
....
com.bar.baz10000
]
正如你可以看到,大文件應在其整體匹配。相反,它約在3280字符後停止,大約在1880行。
我正在使用Grep2.5.1。我最好的猜測是,這個版本的grep只能匹配從圖案中約2^15 = 32768個字符...
爲了比較,運行grep的2.6.3另一臺機器上,下面的工作正常
grep -Pzo '(?si)^\s*allowed\s*\[.*?\]' bigFile.txt
是的。但我試圖說明我看到的問題。如果「。*」不能匹配所有的行,那麼「。*?\\]」永遠不會匹配,因爲它無法找到']' – user2588491