3

巨大なファイル(8GB)がありますが、最初の30行で文字列LATIN1をUTF-8に置き換えたいのですが、最も効率的な方法は何ですか?おそらくsedを使用する方法がありますが、最初の30行を解析した後に終了する手段があります。

VIMは3時間でファイルを保存できませんでした。

4

3 に答える 3

3

問題は、置換の場合、すべてのプログラムが、最終的に元のファイルを置換するために、置換されたファイルのコピーを作成することです。明らかな理由で元のファイルを失うリスクを冒したくないのです。

perlを使用すると、これを1つのライナーで行うことができますが、それによって短くなることはありません(vimは、perlではない別のファイルに履歴を保存するため、vimと比較しておそらくそうなります)。

perl -pi -e 's,\bLATIN1\b,UTF-8,g if $. <= 30' thefile
于 2012-12-24T16:21:28.037 に答える
2

を使用するとsed、次の使用を終了できますq

sed -e 's/LATIN1/UTF-8/g' -e 30q
于 2012-12-24T16:19:50.690 に答える
0

edテストされていませんが、一時ファイルに書き込まずにファイルをインプレースで編集すると思います。

ed yourBigFile << END
1,30s/LATIN1/UTF-8/g
w
q
END
于 2012-12-25T17:15:41.383 に答える