Mam całą masę plików w katalogu i z każdego pliku, który chcę usunąć pierwszy wiersz (łącznie z powrotem karetki). Czytam cały plik w tablicy łańcuchów i zapisuję wszystkie oprócz pierwszego elementu do nowego pliku, ale wydaje mi się to nieco kłopotliwe, czy istnieją lepsze sposoby? Och, preferowanym językiem jest Perl.Perl: Jak usunąć pierwszą linię pliku bez czytania i kopiowania całego pliku
Odpowiedz
Spróbuj jedną wkładkę
perl -pi -e '$_ = "" if ($. == 1);' filename
znam go wcześniej, powinno być wszystko, czego potrzebujesz.
+1 Nigdy nie trzeba przechowywać więcej niż jednej linii na raz. – mob
możesz wyjaśnić, jak to działa? – FistOfFury
zasadniczo mówi on o uruchomieniu perla, parsowaniu w miejscu i wykonaniu poniższego wiersza kodu. Następująca linia używa domyślnej zmiennej $ _, która w tym przypadku jest linią odczytywaną przez opcję -p. $. jest numerem linii nazwy pliku. więc jeśli numer wiersza wynosi == 1, ustaw tekst linii na "". –
use Tie::File qw();
for my $filename (glob 'some_where/some_files*') {
tie my @file, 'Tie::File', $filename or die "Could not open $filename: $!";
shift @file;
}
+1, tylko dla twojego PS. :) –
Należy zauważyć, że to nadal musi przeczytać i skopiować cały plik, ale jest to związane z problemem. Nie znam żadnego systemu operacyjnego, który zapewnia inny sposób usuwania danych z początku pliku. – cjm
Tie :: Plik jest moim oczywistym wyborem, ponieważ został wyraźnie napisany, aby skutecznie poradzić sobie z tą kategorią problemów. – daxim
perl -n -i -e 'print unless $. == 1' myfile
Jest to podobne do odpowiedzi stocherilaca.
Ale w każdym przypadku (i we wszystkich innych udzielonych odpowiedziach!) Zawsze czytasz pełny plik. Nie można tego uniknąć, AFAIK.
+1 to więcej niż jeden sposób zrobienia tego :) –
+1 dla (IMHO) bardziej czytelnej wersji. –
W Windows pod konsolą MinGW, który skasował mój plik "Nie mogę edytować w miejscu na moim pliku: Odmowa uprawnień" – user869097
Jak o
tail +2
w skorupkach?
(edit: w nowszej Linux może trzeba tail -n +2
(dziękuję, GNU :()!)
OH język preferowana jest Perl
Czasami sed
jest lepiej niż sed
. nawet Perl:
sed -i 1d *
Jak podkreślił Schwern następujące robi nie wykonać wczesne wyjście, jak się początkowo wydawało, że będzie:
perl -pi -e '$_ = q// and last if $. == 1;' myFile
Wydaje się jeden nie może unikać przetwarzania cały plik po wszystkim.
To nie robi tego, co myślisz. Jeśli tak, to naruszyłoby sposób działania plików na systemie Unix. To, co się naprawdę dzieje, to '$ _ =" "' jest zawsze fałszywe, więc '$ _ =" "i last' jest takie samo jak' 0 i last'.To zwarcie i nigdy nie wywołuje "ostatniego". Napisałeś: 'perl -pi e '$ _ = q // jeśli $. == 1 'myFile', który jest sprytnym sposobem, aby nie drukować pierwszej linii, ale zdecydowanie odczytuje cały plik. Uruchom za pomocą '-MO = Deparse', aby uzyskać kod i uruchomić go w debugerze, aby zobaczyć. 'do {this; że; } jeśli coś jest bezpieczniejszą konstrukcją. – Schwern
@ Schwern: Mój zły. Trwało to trochę czasu, zanim twoje wyjaśnienia dotarły do ciebie, ale widzę twój punkt widzenia. – Zaid
- 1. Jak usunąć pierwszą i ostatnią linię z pliku tekstowego C#?
- 2. Jak mogę odczytać pierwszą linię z pliku?
- 3. Java/ImageIO uzyskiwanie wymiarów obrazu bez czytania całego pliku?
- 4. Jak wykonać Postgres Copy zignorować pierwszą linię dużego pliku txt
- 5. Szybko zamień pierwszą linię dużego pliku
- 6. Skrypt Bash odczytuje tylko pierwszą linię pliku
- 7. Perl: Usunąć zawartość pliku i otworzyć plik w trybie dopisywania
- 8. Jak specjalizować szablon bez kopiowania i wklejania całego obiektu klasy?
- 9. Usunąć konkretną linię z pliku tekstowego?
- 10. czytania pliku .config
- 11. Wyczyść pierwszą linię jtextarea
- 12. Używanie klas WPF Imaging - Uzyskiwanie wymiarów obrazu bez czytania całego pliku
- 13. pierwszy znak czytania z pliku tekstowego: i »¿
- 14. Jak przesyłać strumieniowo muzykę z pliku w zaszyfrowanym pliku zip bez dekompresji całego pliku?
- 15. Jak usunąć konkretną linię z pliku w systemie UNIX?
- 16. argumenty wiersza poleceń, czytania pliku
- 17. Jak usunąć linię z pliku tekstowego w języku C#?
- 18. Pokaż pierwszą linię akapitu
- 19. Jak obliczyć BitRate dla VBR mp3 bez pobierania całego pliku?
- 20. openCSV nie czyta całego pliku
- 21. Zmiana właściciela pliku podczas kopiowania
- 22. SVN: Jak uzyskać pierwszą wersję pliku?
- 23. Odczytaj zarówno znak jak i linię z pliku tekstowego
- 24. Jak powiedzieć w Perlu, jaki jest rozmiar pliku wewnątrz archiwum gzip bez rozpakowywania całego pliku?
- 25. Jak odczytać dane z pliku ZIP bez konieczności rozpakowywania całego pliku
- 26. Notepad ++ Wyrażenie regularne znaleźć i usunąć linię
- 27. Jak usunąć wszystkie puste wiersze w pliku przy pomocy Pythona?
- 28. Jak usunąć kopię uchwytu pliku STDIN?
- 29. Jak usunąć bieżącą linię i dodać nową linię w Notepad ++?
- 30. Zapis do pliku w Perl
Jest to niemożliwe, ponieważ pliki są przechowywane. Zawsze będziesz musiał przeczytać cały plik i napisać wszystko oprócz pierwszej linii - system operacyjny nie ma innego wyjścia. – Konerak