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, tail
bę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ą -i
opcji
sed -i 1,42d dump.sql
sed -i 1,50000000d 17GigFile
tworzy plik tymczasowy, sedXYZ
który zużywa o wiele więcej gigabajtów. Czy istnieje podejście bez plików tymczasowych?
tail -n +43
i head -n 44
jak 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 -l
ponieważ wywołujesz plik, przetwarzasz go dwukrotnie, podczas gdy sed
lub tail
przetwarzasz go tylko raz.
Z powodu sed
rozbieżności w systemach Linux i Mac postanowiłem użyć tail -n +43 dump.sql > dump.sql
formatu.
tail
. Wiele razy znalazłem coś nowego do nauczenia się na podstawie twoich odpowiedzi. dzięki.