3

効率的な正規表現(所有格が望ましい)を探しています。これを使用して、大きなファイル(5Gb)から1つの区切り文字('、')のみを含む行をgrepすることができます。

例えば

X,Y
X1,Y1,Y2
X3,Y3
X4,Y4
X5,Y5,Z6

>>> grep "???" big_file

X,Y
X3,Y3
X4,Y4
4

2 に答える 2

9

文字列の開始/終了マーカーがあるため、単純^[^,]*,[^,]*$にバックトラックを避けるべきではありませんか?

于 2012-11-16T14:09:43.777 に答える
0

@Rawling(ここでの答えの1つ)は正しく、彼の正規表現は正しいですが、それでも所有格ではないため最適化されていません。バックトラックが発生しないことは正しいですが、所有格があるため、最高のパフォーマンスにはなりません。数量詞は、バックトラック位置を覚えておく必要はありません。質問に添付されたリンクで言及されたように。

次の式は所有格と最適化されます。質問で尋ねられたように、grepの使用とともにデモンストレーションします。

grep -E "^ [^、] * +、[^、] * + $" big_data

于 2012-11-16T15:30:49.030 に答える