Muszę usunąć pierwsze 42 wiersze zrzutu SQL 2 GB.
Wiem, że mogę wyświetlić pierwsze wiersze, używając:
head -n 44 dump.sql
Ale czy istnieje możliwość ich edycji lub usunięcia?
Muszę usunąć pierwsze 42 wiersze zrzutu SQL 2 GB.
Wiem, że mogę wyświetlić pierwsze wiersze, używając:
head -n 44 dump.sql
Ale czy istnieje możliwość ich edycji lub usunięcia?
Odpowiedzi:
Jeśli chcesz po prostu wyświetlić linie od 43-go, możesz użyć
tail -n +43 dump.sql
+Znak jest ważne - bez niego, tailbędzie wydrukować ostatnie zamiast 43 wierszy. Alternatywnie z „sed”
sed 1,42d dump.sql
Jeśli chcesz naprawdę usunąć pierwsze 42 wiersze z oryginalnego pliku, możesz sprawić, by sed wprowadził zmianę za pomocą -iopcji
sed -i 1,42d dump.sql
sed -i 1,50000000d 17GigFiletworzy plik tymczasowy, sedXYZktóry zużywa o wiele więcej gigabajtów. Czy istnieje podejście bez plików tymczasowych?
tail -n +43i head -n 44jak wspomniano w pytaniu?
To wydaje się najłatwiejsze:
sed '1,42d' test.sql > test2.sql
Usuń wiersze 1-42 z test.sql i zapisz jako test2.sql
Możesz używać Vima w trybie Ex:
ex -s -c '1d42|x' dump.sql
1 przejdź do pierwszej linii
42 wybierz 42 linie
d usunąć
x Zapisz i zamknij
Niestety nie mogę teraz podać rzeczywistego kodu. Spróbuj jednak spojrzeć na coś w stylu
tail -n arcv(`wc -l`) -44
To, co należy zrobić (po prawidłowym sformatowaniu), to policzyć liczbę wierszy w pliku (wc -l), odjąć od niego 44 (-44), a następnie wydrukować wszystko, zaczynając od 45-tej linii w pliku.
Mam nadzieję, że to pomoże i powodzenia.
wc -lponieważ wywołujesz plik, przetwarzasz go dwukrotnie, podczas gdy sedlub tailprzetwarzasz go tylko raz.
Z powodu sedrozbieżności w systemach Linux i Mac postanowiłem użyć tail -n +43 dump.sql > dump.sqlformatu.
tail. Wiele razy znalazłem coś nowego do nauczenia się na podstawie twoich odpowiedzi. dzięki.