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.


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ę.



6

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

dd if=yourfile of=outname bs=4k count=thefirstX4kb

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

1

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


Dzięki za twoją odpowiedź. Wolę edytować plik w miejscu, aby zaoszczędzić miejsce na dysku i pamięć.
Hemant,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.