Bagaimana saya bisa mengedit file besar di tempatnya?

18

Saya memiliki beberapa file berukuran masing-masing> 1 GB. Saya perlu menghapus beberapa byte terakhir dari file. Bagaimana saya bisa melakukannya? Saya lebih suka mengedit file di tempat untuk menghemat ruang disk.

Saya menggunakan HP-UX.

Hemant
sumber
Saya pikir vimmemiliki batas 4G (bisa salah) tetapi saya tidak berpikir itu melakukannya di tempat (bisa salah).
xenoterracide
1
@ xenoterracide: Saya tidak punya vim di sini :-( dan vi memberikan Kesalahan "Tmp file terlalu besar".
Hemant
1
@Hernant: Pesan itu memberi tahu Anda semua yang perlu Anda ketahui tentang pengeditan di tempat: vi sedang mencoba menyalinnya ke / tmp untuk dikerjakan. Saya pikir vim akan melakukan hal yang sama, dan memang ingin membuat cadangan di direktori yang sama.
David Thornley

Jawaban:

10

Coba gunakan hexedit Saya belum mencobanya di HP-UX tetapi harus bekerja. Ini memungkinkan Anda untuk pindah ke lokasi dalam file dan memotong. Saya cukup yakin bahwa itu tidak membaca seluruh file tetapi hanya mencari lokasi yang sesuai untuk ditampilkan.

Penggunaannya cukup sederhana setelah Anda meluncurkannya, tombol panah memungkinkan Anda untuk bergerak. F1 memberi bantuan. Ctrl-G pindah ke lokasi dalam file (petunjuk: untuk pindah ke akhir gunakan ukuran file dari baris bawah tampilan). Posisikan kursor pada byte pertama yang ingin Anda potong lalu tekan Escape T setelah Anda mengonfirmasi pemotongan akan dilakukan. Ctrl-x keluar.

Richm
sumber
14

Potong 2 kilobyte dari akhir file:

truncate -s-2K file
Maciej Piechotka
sumber
6

Anda dapat menggunakan dd misalnya:

dd if=yourfile of=outname bs=4k count=thefirstX4kb
maxschlepzig
sumber
1
Terimakasih atas tanggapan Anda. Saya lebih suka mengedit file di tempat untuk menghemat ruang disk. Jika tidak ada yang membantu saya akan menggunakan dd :-).
Hemant
6

Gunakan alat yang memberi Anda akses ke truncatepanggilan sistem. Anda dapat melakukannya hanya dengan alat POSIX. Peringatan, diketik dalam browser; berhati-hatilah karena ddkesalahan yang bahkan lebih tidak bisa dimaafkan daripada perintah unix yang biasa. 123456 adalah jumlah byte yang harus disimpan.

dd if=/dev/null of=/file/to/truncate seek=1 bs=123456

Versi Perl jauh lebih mudah dibaca:

perl -e 'truncate "$ARGV[0]", 123456 or die $!' /file/to/truncate
Gilles 'SANGAT berhenti menjadi jahat'
sumber
1

Anda dapat menggunakan splitatau ed, awkatau bahasa pemrograman apa pun.

Mircea Vutcovici
sumber
Terimakasih atas tanggapan Anda. Saya lebih suka mengedit file di tempat untuk menghemat ruang disk dan memori.
Hemant