Linux не выводить последние строки

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

Я использую, sed чтобы быстро удалить строки с определенной позиции, как

Но что делать, если я хочу удалить последнюю строку файла, и я не знаю количество строк (я знаю, что могу получить это, используя wc и несколько других приемов).

В настоящее время используется обходной путь head и в tail сочетании с wc этим. Какие-нибудь быстрые повороты здесь?

в sed $ последняя строка, поэтому удалить последнюю строку:

$ за последнюю строку:

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

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

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

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

tail и head являются частью coreutils -rpm (по крайней мере для систем на основе rpm).

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

Плохая новость: в соответствии с man-страницей RH5 эта опция не описана

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

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

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

Источник

Как в консоли вывести все строчки кроме последней

Задача. В консоли есть какой-то текст (вывод какой-то команды или содержимое файла). Зарнее неизвестно сколько в этом тексте строк. Нужно вывести на экран все строчки, кроме последней.

Самый простой способ это сделать в linux — это использовать команду head и передать ей отрицательное число в значении параметра -n

Вот пример. Есть команда, которая выдает три строчки на экран:

Передамем -1 (минус один) в качестве параметра -n для head и получаем все строчки, кроме последней:

И можно указать не только -1 (чтобы получить все строчки, кроме последней), но и -2 (чтобы получить все строчки, кроме двух последних) или -3 (все, кроме трех последних) и т.д.

Читайте также:  Найти пустые папки windows

Конечно, если заранее знать сколько всего строк, то можно использовать не отрицательное значение, а положительное значение — просто сказать — покажи первые 2 строчки:

Но отрицательный параметр очень удобен, когда заранее неизвестно сколько строчек нужно обработать.

Вот фрагмент хелпа к команде head, которое описывает параметр -n:

К сожалению, на macOS отрицательные значения параметра -n не работают. На маке живет BSD верия head (на linux GNU версия) и на маке попытка указать отрицательный параметр выдает ошибку:

Для того чтобы на macOS вывести все строчки, кроме последний можно использовать вот такой однострочник:

(в самом конце этого однострочника находится число -1. Если нужно показать все строчки, кроме двух последних, то нужно вместо -1 написать -2, если нужно показать все строчи кроме трех последних, то -3, и т.д.)

Другое возможное решение на macOS — установить пакет coreutils с помощью Homebrew:

И использовать ghead команду с отрицательнм значением парметра -n:

Источник

Удаление строк из файла с использованием sed

В Unix команда SED удаляет одну или несколько строк из указанного файла по желанию пользователя. Эта утилита используется для работы с командной строкой Unix, для удаления из файла выражений, которые могут быть идентифицированы с помощью определяющего разделителя (например, запятая, табуляция или пробел), по номеру строки или путем поиска строки, выражения или адреса строки в синтаксисе sed.

Sed: удалить одну или несколько строк из файла

Вот как можно удалить одну или несколько строк из файла.

Синтаксис

n = номер строки

string = ряд символов, найденный в строке

regex = регулярное выражение, соответствующее искомому шаблону

addr = адрес строки (номер или шаблон)

d = удалить (delete)

Примеры Sed

Вот несколько примеров использования приведенного выше синтаксиса.

Используйте следующий код, чтобы удалить третью строку:

Удалите строку, содержащую ряд букв «awk», используя:

Вы можете удалить последнюю строку, введя:

Или удалить все пустые строки:

Удалить строку, соответствующую регулярным выражениям (путем исключения одного из них, содержащего цифровые символы, как минимум 1 цифру, расположенные в конце строки):

Удалить интервал между строками 7 и 9:

Та же операция, что и приведенная выше, но с заменой адреса параметрами:

Вышеприведенные примеры отображают изменения только при открытии файла (stdout1 = screen).

Для постоянных изменений в старых версиях (ниже 4) используйте временный файл для GNU sed с использованием команды -i [suffix]:

Источник

linux-notes.org

Команда tail в операционных системах UNIX или Linux используется для вывода последних N строк из файла на терминал. Команда tail особенно используется с лог-файлами, чтобы вывести последние несколько строк, чтобы знать о ошибках. Синтаксис команды tail таков:

Читайте также:  Файла как диск linux

Параметры команды tail таковы:

  • c : Выводит последние N байт указанного файла; Выводит + печатает символы N байт в файле.
  • n : Выводит последние N строк; Выводит + печатает строки из N-го количества строк в файле.
  • f : Вывод строк в режиме реального времени ( выводит когда появляются новые строки в файле).

Утилита tail в примерах Unix/Linux

В своей статье «Утилита tail в примерах Unix/Linux» я хотел бы рассказать о замечательной утилите tail и привести готовые примеры использования.

Создайте следующий файл use_tail.txt в операционной системе Linux или Unix для практикующих примеров со следующим содержанием:

Вывод последних 10 строк.

По умолчанию, команда tail печатает последние 10 строк из файла:

Вывести последние N строк.

Используйте опцию «-n», чтобы напечатать последние N строк из файла. Следующий пример печатает последние 3 строки из файла:

Вывести строки из N-й строки.

Вы можете печатать строки, начиная с N-й строки в файле. Следующий пример печатает строки начиная с 4-й линии:

Вывести последние n байт.

Использовать опцию «-c» для вывода последних N байт из файла. Следующий пример печатает последние 7 байт из файла:

5. Print characters from the Nth byte

Используйте следующий символ «+» с опцией «-c» чтобы печатать символы с N-го байта. Следующий пример печатает символы с 69-го байта.

Выводить последние строки из файла динамически (в режиме реального времени).

Опция «-f» выводит строки из файла, который динамично растет. При запуске команды «tail -f» с именем файла, он будет печатает последние 10 строк и ожидать новых линий, которые будут добавлены в файл. Всякий раз, когда новые линии добавляется в файл, команда tail также добавляет новые строки на стандартный вывод (на терминал). Опция «-f» полезна при отладке приложений.. Вы можете использовать опцию «-f», чтобы начать анализировать вывод разных ошибок в режиме реального времени:

На этом, у меня все, тема «Утилита tail в примерах Unix/Linux» завершена.

Источник

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

У меня есть файл, foo.txt , содержащий следующие строки:

Мне нужна простая команда, в результате которой содержимое foo.txt будет:

11 ответов:

Опция -i не существует в версиях GNU sed старше 3.95, поэтому вы должны использовать ее в качестве фильтра с временным файлом:

Конечно, в этом случае вы также можете использовать head -n -1 вместо sed .

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

Если вы хотите удалить верхнюю строку, используйте следующее:

, Что означает выходные линии, начинающиеся со строки 2.

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

Читайте также:  Графика для windows form

У меня были проблемы со всеми ответами здесь, потому что я работал с огромным файлом (

300 ГБ), и ни одно из решений не масштабировалось. Вот мое решение:

В словах: узнайте длину файла, который вы хотите закончить (длина файла минус длина его последней строки, используя bc ), и установите эту позицию, чтобы быть концом файла (путем dd ing один байт /dev/null на него).

Это быстро, потому что tail начинает чтение с конца, и dd перезапишет файл на месте вместо копирования (и разбора) каждой строки файла, что и делают другие решения.

Примечание: это удаляет строку из файла на месте! Сделайте резервную копию или протестируйте фиктивный файл, прежде чем опробовать его на своем собственном файле!

Чтобы удалить последнюю строку из файла , не читая весь файл и ничего не переписывая , можно использовать

Чтобы удалить последнюю строку и также распечатать ее на stdout («pop» it), вы можете объединить эту команду с tee :

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

Если вы собираетесь использовать их повторно и хотите обработки ошибок и некоторые другие функции, вы можете использовать команду poptail здесь: https://github.com/donm/evenmoreutils

Если вы хотите удалить только последнюю строку вывода без изменения самого файла, сделайте

sed -e ‘$ d’ foo.txt

Если вы хотите удалить последнюю строку самого входного файла, сделайте

Для Пользователей Mac:

На Mac, head-n -1 не будет работать. И я пытался найти простое решение [ не беспокоясь о времени обработки], чтобы решить эту проблему только с помощью команд «head» и/или «tail».

Я попробовал следующую последовательность команд и был счастлив, что смог решить ее, просто используя команду «tail» [с опциями, доступными на Mac ]. Итак, если вы находитесь на Mac и хотите использовать только «хвост» для решения этой проблемы, вы можете использовать следующую команду:

Кот файл.txt / tail-r / tail-n +2 / tail-r

Пояснение:

1> tail-r: просто меняет порядок строк на своем входе

2> tail-n +2: выводит все строки, начиная со второй строки на входе

По существу, этот код говорит следующее:

Для каждой строки после первой выведите буферизованную строку

Для каждой строки сбросьте буфер

Буфер запаздывает на одну строку, поэтому вы в конечном итоге печатаете строки от 1 до n-1

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

Источник

Оцените статью