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

38

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

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

head -n 44 dump.sql

Но есть ли способ редактировать или удалять их?

    
задан Kohjah Breese 24.01.2014 в 17:44
источник

6 ответов

8

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

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

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

    
ответ дан Kohjah Breese 24.01.2014 в 17:57
источник
50

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

tail -n +43 dump.sql

Значок + важен - без него tail выведет вместо него строки last . Альтернативно с 'sed'

sed 1,42d dump.sql

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

sed -i 1,42d dump.sql
    
ответ дан steeldriver 24.01.2014 в 17:58
8

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

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

ответ дан ptantiku 24.01.2014 в 17:59
3

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

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

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

  3. d delete

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

ответ дан Steven Penny 16.04.2016 в 21:16
0

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

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

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

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

    
ответ дан kb2bcg 24.01.2014 в 17:54
0

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

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
    
ответ дан souravc 24.01.2014 в 17:54