私の perl-grep ステートメントは、大きな一致 (~32k 文字) のすべての要素をキャプチャしていませんが、小さな一致では問題ありません。
「許可された[ < TEXT > ]」を取得するために使用したいgrepコマンド:
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