1

в то время как на bash я попытался удалить 3 последних столбца файла, используя:

head -n -3 file> file

но файл выходит пустым. Я могу обойти это, но я хотел бы знать, что вызывает это.

Огромное спасибо!

3 ответа3

3

Давайте разберемся, что делает эта команда.

  1. > file

    Это открывает file для записи и усекает его.

  2. head -n -3 file

    Это читает все, кроме последних 3 строк file . Да, тот же file вы урезали на шаге 1.

2

То, что вы пытаетесь сделать, это встроенная замена, которая на самом деле невозможна без обходных путей. По вашей команде исходный файл перезаписывается, потому что он уже открыт и очищен при отправке команды.

Вот пара идей:

  • Использовать временный файл

    head -n -3 file > tmp
    mv tmp file
    
  • Используйте инструмент sponge из moreutils, который впитывает весь ввод и затем записывает в файл:

    head -n -3 file | sponge file
    
0

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

ex -sc '-2,d|x' file
  1. -2, выберите последние 3 строки

  2. d удалить

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .