Удалить первые n строк большого текстового файла

Мне нужно удалить первые 42 строки SQL-дампа объемом 2 ГБ.

Я знаю, что могу просмотреть первые строки, используя:

head -n 44 dump.sql

Но есть ли в любом случае возможность отредактировать или удалить их?

Если ты хочешь просто вид строки, начиная с 43-го, вы можете использовать

tail -n +43 dump.sql

То + знак важен - без него, tail напечатает последний Вместо этого 43 строки. В качестве альтернативы с помощью "sed"

sed 1,42d dump.sql

Если вы действительно хотите удалить первые 42 строки из исходного файла, вы можете заставить sed внести изменения на месте с помощью -i вариант

sed -i 1,42d dump.sql

Это, кажется, самый простой:

sed '1,42d' test.sql > test2.sql

Удалите строки 1-42 из test.sql и сохраните как test2.sql

попробуйте это,

tail -n +43 dump.sql > dump_new.sql

Вы можете использовать Vim в режиме Ex:

ex -s -c '1d42|x' dump.sql
  1. 1 перейти к первой строке

  2. 42 выберите 42 строки

  3. d удалить

  4. x сохранить и закрыть

Потому что sed несоответствия между Linux и Mac, я решил использовать tail -n +43 dump.sql > new.sql формат.

Просто чтобы добавить это. Если вы используете Mac, вам необходимо добавить расширение резервного копирования. Ответ из этого пост.

sed -i '.bak' 1,42d dump.sql

Извините, я не могу дать вам реальный код прямо сейчас.Тем не менее, попробуйте взглянуть на что-то вроде

tail -n arcv(`wc -l`) -44

Что это должно сделать (после правильного форматирования), так это подсчитать количество строк в файле (wc -l), вычесть из него 44 (-44), а затем распечатать все, начиная с 45-й строки в файле.

Надеюсь, это поможет и удачи.

Попробуйте это,

head -n 42 dump.sql > tmp; cat dump.sql | grep -vxf tmp > dump.sql.new; rm tmp

или,

a=$(cat dump.sql| wc -l); tail -n "$((a-42))" dump.sql > dump.sql.new