0

私の 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
4

1 に答える 1