巨大なファイル(8GB)がありますが、最初の30行で文字列LATIN1をUTF-8に置き換えたいのですが、最も効率的な方法は何ですか?おそらくsedを使用する方法がありますが、最初の30行を解析した後に終了する手段があります。
VIMは3時間でファイルを保存できませんでした。
問題は、置換の場合、すべてのプログラムが、最終的に元のファイルを置換するために、置換されたファイルのコピーを作成することです。明らかな理由で元のファイルを失うリスクを冒したくないのです。
perlを使用すると、これを1つのライナーで行うことができますが、それによって短くなることはありません(vimは、perlではない別のファイルに履歴を保存するため、vimと比較しておそらくそうなります)。
perl -pi -e 's,\bLATIN1\b,UTF-8,g if $. <= 30' thefile
を使用するとsed
、次の使用を終了できますq
。
sed -e 's/LATIN1/UTF-8/g' -e 30q
ed
テストされていませんが、一時ファイルに書き込まずにファイルをインプレースで編集すると思います。
ed yourBigFile << END
1,30s/LATIN1/UTF-8/g
w
q
END