Удалите последнюю строку из файла

Можно использовать sed. Как это:

sed -e 's/Result:\(.*\)\..*$/\1/g' file_name

если Вы хотите сохранить результат в том же файле, можно добавить -i кому: sed аргументы

47
22.04.2014, 19:21
6 ответов

в sed $ последняя строка так для удаления последней строки:

sed '$d' <file>
92
27.01.2020, 19:34
  • 1
    Использовать sed -i '$d' <file> отредактировать файл на месте. –  WanderingMind 22.05.2017, 21:59

$ для последней строки:

sed '$d' file
31
27.01.2020, 19:34
  • 1
    избил Вас на 30 Верных секунд :P –  h3rrmiller 24.10.2012, 17:45
  • 2
    Печально, хотя нужно использовать более сложные методы для удаления, скажем, последних двух строк. –  dubiousjim 24.10.2012, 18:13
  • 3
    Что Вы имеете в виду? sed '$d' file; sed '$d' file –  Rob 24.10.2012, 18:35
  • 4
    @Rob: sed '$d' file на самом деле не изменяет файл; это просто распечатывает содержание файла минус последняя строка. Так sed '$d' file; sed '$d' file распечатает содержание файла дважды, минус последняя строка каждый раз. delete-the-last-two-lines эквивалент sed '$d' file sed '$d' file | sed '$d'. –  ruakh 24.10.2012, 21:48
  • 5
    Да, это неэлегантно, но конечно это работает. Я сделал бы это в одной передаче с sed -n '1{h;n;}; $q; x; p;'. Я надувал это, мы не можем просто сделать sed '$-1,$d'. –  dubiousjim 24.10.2012, 23:24

cat file.txt | head -n -1 > new_file.txt

Остерегайтесь, кажется, в зависимости от последней строки file.txt (если это заканчивается EOF, или \n и затем EOF), количество строк в new_file.txt может быть то же (как file.txt) после этой команды (это происходит, когда существует нет \n) - в любом случае содержание последней строки удалено.

Кроме того, обратите внимание, что необходимо использовать второй (промежуточный) файл. Если Вы кошка и перенаправление в тот же файл, Вы сотрете его.

15
27.01.2020, 19:34
  • 1
    Где это работает, это могло также быть просто head -n -1 file.txt > new_file.txt. Отметьте хотя то отрицание количества на head -n только доступно для некоторых реализаций head. Например, это не работает на FreeBSD или на версию BusyBox head. –  dubiousjim 25.10.2012, 12:50
  • 2
    @dubiousjim:Договорились, head -n -1 file.txt > new_file.txt лучше. Это работает тот же путь относительно моих двух комментариев (то же количество строк, и, стирание на том же файле). Что касается отрицательного аргумента, такие различия время от времени происходят между Unixes, и они часто печальны, потому что Вы ожидаете, что это будет той же командой полностью (и почему не был бы Вы - то же имя и цель!) - во всяком случае, положительная сторона. (Я использую Debian.) –  Emanuel Berg 25.10.2012, 20:38

head --lines=-1. Я сначала споткнулся через эту возможность в странице справочника для головы в SLES11SP2-системе (coreutils-8.12-6.23.1)

tail и head часть coreutils- об/мин (по крайней мере, для основанных систем об/мин).

Согласно журналу изменений coreutils, этот синтаксис поддерживается начиная с coreutils-версии 5.0.1

Плохие новости: Согласно RH5-странице-справочника не описана эта опция

Хорошие новости: Это работает с RH5 (так в Вашем случае: это работает - по крайней мере, с текущей версией RH5).

rpm -q coreutils показывает мне (на CentOS 5.8): coreutils-5.97-34.el5_8.1

Я не уверен если RH5.5. уже имеет coreutils-версию, которая поддерживает его. Но 5.5 имеет EoLed так или иначе.

5
27.01.2020, 19:34
  • 1
    +1. это работа отлично над RH5.5.Спасибо. –  mtk 28.11.2012, 08:23

Линукс

$ — последняя строка, d — удаление:

sed '$d' ~/path/to/your/file/name

МакОС

Эквивалент sed -i

sed -i '' -e '$ d' ~/path/to/your/file/name
4
27.01.2020, 19:34

На Mac (BSD head/tail )вы можете использовать:

cat file.txt | tail -r | tail -n +2 | tail -r
1
01.05.2020, 18:00

Теги

Похожие вопросы