Jak mogę edytować duży plik na miejscu?

18

Mam kilka plików o rozmiarze> 1 GB każdy. Muszę usunąć kilka ostatnich bajtów z plików. Jak mogę to zrobić? Wolę edytować plik w miejscu, aby zaoszczędzić miejsce na dysku.

Jestem na HP-UX.

Hemant
źródło
Myślę, że vimma limit 4G (może być źle), ale nie sądzę, że to robi na miejscu (może być źle).
ksenoterrakid
1
@xenoterracide: Nie mam tutaj vima :-( i vi daje błąd „Plik Tmp za duży” Błąd.
Hemant
1
@Hernant: Ta wiadomość mówi ci wszystko, co musisz wiedzieć o edycji w miejscu: vi próbuje skopiować ją do / tmp, aby nad nią pracować. Myślę, że vim zrobi to samo i lubi tworzyć kopie zapasowe w tym samym katalogu.
David Thornley,

Odpowiedzi:

10

Spróbuj użyć hexedit Nie próbowałem tego na HP-UX, ale powinno działać. Umożliwia przejście do lokalizacji w pliku i obcięcie. Jestem prawie pewien, że nie odczytuje całego pliku, ale po prostu szuka odpowiedniej lokalizacji do wyświetlenia.

Użycie jest dość proste, gdy go uruchomisz, klawisze strzałek pozwalają się poruszać. F1 pomaga. Ctrl-G przenosi się do lokalizacji w pliku (wskazówka: aby przejść do końca, użyj rozmiaru pliku z dolnego wiersza wyświetlacza). Ustaw kursor na pierwszym bajcie, który chcesz obciąć, a następnie naciśnij klawisz Escape T po potwierdzeniu, że obcięcie zostanie wykonane. Ctrl-x kończy pracę.

Richm
źródło
14

Wytnij 2 kilobajty z końca pliku:

truncate -s-2K file
Maciej Piechotka
źródło
6

Możesz użyć dd na przykład:

dd if=yourfile of=outname bs=4k count=thefirstX4kb
maxschlepzig
źródło
1
Dzięki za twoją odpowiedź. Wolę edytować plik w miejscu, aby zaoszczędzić miejsce na dysku. Jeśli nic nie pomoże, użyję dd :-).
Hemant,
6

Użyj narzędzia, które daje dostęp do truncatewywołania systemowego. Możesz to zrobić tylko za pomocą narzędzi POSIX. Ostrzeżenie wpisane w przeglądarce; zachowaj szczególną ostrożność, ponieważ ddjest to bardziej bezlitosne błędy niż zwykłe polecenie unix. 123456 to liczba bajtów do zachowania.

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

Wersja Perla jest znacznie bardziej czytelna:

perl -e 'truncate "$ARGV[0]", 123456 or die $!' /file/to/truncate
Gilles „SO- przestań być zły”
źródło
1

Możesz użyć splitlub ed, awklub dowolnego języka programowania.

Mircea Vutcovici
źródło
Dzięki za twoją odpowiedź. Wolę edytować plik w miejscu, aby zaoszczędzić miejsce na dysku i pamięć.
Hemant,