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

Обновлено: 21.11.2024

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

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

@Nils Я использую «Red Hat Enterprise Linux Server, выпуск 5.5 (Tikanga)». Можете ли вы указать варианты головы и хвоста, которые вы знаете для разных вкусов?

6 ответов 6

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

каким-то образом ваш ответ не сработал без предложения верхнего комментария, то есть без -i . Почему это? т. е. мне нужно sed -i '$d'.

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

@Rob: файл sed '$d' на самом деле не изменяет файл; он просто выводит содержимое файла за вычетом последней строки. Итак, sed файл '$d'; sed '$d' будет распечатывать содержимое файла дважды, каждый раз за вычетом последней строки. Эквивалент файла sed '$d' для удаления последних двух строк равен sed '$d' файл | sed '$d' .

Да, это неэлегантно, но, конечно, работает. Я бы сделал это за один проход с помощью sed -n '1; $к; Икс; п;' . Я дулся, что мы не можем просто сделать sed '$-1,$d' .

cat файл.txt | head -n -1 > новый_файл.txt

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

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

В тех случаях, когда это работает, это также может быть просто head -n -1 file.txt > new_file.txt . Обратите внимание, что отрицательные значения для head -n доступны только для некоторых реализаций head . Например, это не работает для FreeBSD или версии head для BusyBox.

@dubiousjim: Согласен, лучше использовать head -n -1 file.txt > new_file.txt. Это работает одинаково в отношении двух моих комментариев (одинаковое количество строк и стирание в одном файле). Что касается отрицательного аргумента, такие различия время от времени возникают между Unix, и они часто разочаровывают, потому что вы ожидаете, что это будет одна и та же команда (и почему бы и нет - то же имя и цель!) - во всяком случае, хорошо точка. (Я использую Debian.)

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

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

Согласно журналу изменений 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.

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

В этом руководстве демонстрируются различные способы удаления определенной строки из файла в Python.

Эта задача удаления конкретной строки может быть реализована с помощью нескольких различных подходов.

Использование номера строки для удаления определенной строки из файла в Python

Способ 1

Этот метод, как указано выше, использует номер строки, указанный пользователем, для удаления строки из определенного файла в Python.

Он использует цикл for, метод readlines() и метод enumerate().

Возьмем в качестве примера файл с именем test.txt , содержание которого подробно описано ниже.

В следующем коде используются методы enumerate() и readlines() для удаления строки из определенного файла в Python.

Приведенный выше код вносит следующие изменения:

  1. Сначала файл открывается в режиме чтения.
  2. Затем содержимое данного файла считывается в список с помощью функции readlines().
  3. Затем файл закрывается.
  4. Затем файл снова открывается, но на этот раз в режиме записи.
  5. Затем к созданному списку применяются цикл for и функция enumerate().
  6. Условие if используется для проверки и выбора номера строки. Упомянутый номер строки удален.
  7. Затем файл закрывается.

Метод 2

Метод seek() также можно использовать для реализации той же задачи удаления строки из файла с использованием номера строки. Мы будем работать с тем же файлом test.txt, как указано в методе выше.

Благодаря методу seek() нам не нужно дважды открывать один и тот же файл, что упрощает и ускоряет его.

В следующем коде используется метод seek() для удаления строки из определенного файла в Python.

Приведенный выше код вносит следующие изменения:

  1. Файл открывается в режиме r+, который допускает как чтение, так и запись.
  2. Затем содержимое файла считывается в список с помощью функции readlines().
  3. Затем используется метод seek() для перемещения указателя обратно в начальную точку списка.
  4. Затем файл усекается с помощью метода truncate().
  5. Затем к созданному списку применяются цикл for и функция enumerate().
  6. Условие if используется для проверки и выбора номера строки. Упомянутый номер строки удален.
  7. Файл закрыт.

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

Для реализации этого метода мы используем нарезку списка при записи содержимого файла в список.

Например, мы удалим первую строку из упомянутого выше файла ( test.txt ).

Следующий код удаляет первую строку из заданного файла в Python.

Приведенный выше код вносит следующие изменения и обеспечивает следующий вывод:

  1. Файл открывается в режиме r+, который допускает как чтение, так и запись.
  2. Содержимое файла считывается в список с помощью функции readlines().
  3. Затем используется метод seek() для перемещения указателя обратно в начальную точку списка.
  4. Затем файл усекается с помощью метода truncate().
  5. Все строки из файла затем записываются в список, за исключением первой строки. Это стало возможным благодаря нарезке списка.

Удалить строку, совпадающую с заданным конкретным текстом

Этот метод можно использовать, когда есть несколько строк, содержащих определенный текст. Затем можно удалить строки, соответствующие заданному тексту.

Например, мы удалим строку, соответствующую заданному конкретному тексту, из того же файла ( test.txt ), который используется в вышеуказанных методах.

Этот метод использует функцию strip() и функцию write() для реализации задачи удаления строки, содержащей заданный текст.

Следующий код удаляет строку, которая соответствует заданной конкретной строке в Python.

Приведенный выше код вносит следующие изменения и обеспечивает следующий вывод:

Удалить строку, совпадающую с заданным словом

Подобно удалению строки путем сопоставления всей строки, мы также можем попытаться найти слово, которое может содержаться в строке, а затем удалить эту конкретную строку.

Например, мы удалим строку, соответствующую заданному конкретному слову, из того же файла ( test.txt ), который используется в вышеуказанных методах.

Для этого метода мы используем модуль os, который предоставляет Python. Мы также создаем еще один новый файл и записываем в него данные для реализации этой задачи.

Следующий код удаляет строку, которая соответствует заданному слову в Python.

Приведенный выше код вносит следующие изменения и обеспечивает следующий вывод:

Удалить самую короткую строку в данном файле в Python

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

Например, мы удалим самую короткую строку из того же файла ( test.txt ), который использовался в вышеуказанных методах.

Следующий код удаляет самую короткую строку в данном файле в Python.

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

Чтобы удалить все строки определенного файла в Python, мы можем использовать функцию truncate(). Кроме того, указатель файла затем возвращается к началу файла.

Следующий код удаляет все строки из заданного файла в Python.

Статьи DelftStack написаны такими же фанатами программного обеспечения, как и вы. Если вы также хотите внести свой вклад в DelftStack, написав платные статьи, вы можете посетить страницу «Написать для нас».

Статья по теме — файл Python

сообщить об этом объявлении

В этом руководстве показано, как удалить N первых или последних строк из текстового файла в PowerShell. Я буду использовать PowerShell 7, если вам интересно, какая у меня версия платформы. Время от времени у меня возникает задача удалить N первых или последних строк из текстового файла с вариантами. PowerShell — полезный встроенный инструмент для такой задачи. Он включает в себя оператор диапазона, который может здесь помочь.

Прежде всего, мы слушаем файл для тестирования.Возможно, самый быстрый способ создать текстовый файл с заданным количеством строк — использовать командлет Set-Content Power Shell в сочетании с оператором range. В третьей строке я помещаю содержимое файла в переменную, которую буду дальше обрабатывать в скрипте.

Откройте PowerShell и выполните следующие строки одну за другой.

Set-Content $file (1..100)-Force

$content = Get-Content $file

Важно отметить, что командлет Set-Content добавляет пустую строку в конец файла. В этой самой задаче это ни на что не влияет, но имейте это в виду. Вы поймете, почему это важно.

Теперь у нас есть файл, давайте посмотрим, как удалить линии.

Удалить N первых строк из текстового файла с помощью PowerShell

$content.length — длина массива строк файла, созданного командлетом Get-Content, т. е. индекс последнего элемента (исключая последнюю пустую строку, добавленную командой Set-Content!) Чтобы удалить первые 10 строк, нам нужно взять строки с 11-й (ее индекс равен 10) до конца.

$content[10..($content.length-1)]|Вне файла $file -Force

Это довольно просто. Теперь давайте удалим последние строки из того же файла.

Удалить N последних строк из текстового файла с помощью PowerShell

Здесь та же логика. Индекс 0 — это первая строка, $content.length-11 исключает из выборки последние 10 строк. Мы просто сохраняем все, что находится между ними.

$content[0..($content.length-11)]|Вне файла $file -Force

Удалить все, кроме последних 10 строк

Наконец, следующая команда поможет вам удалить в текстовом файле все, что находится выше последних 10 строк.

$content[($content.length-11)..($content.length-1)]|Внешний файл $file -Force

Используя переменную $content, вы можете легко получить указанную строку из файла. Поскольку это массив, на любой элемент массива можно ссылаться по его порядковому номеру, просто имейте в виду, что это система индексации с отсчетом от нуля. Например, введите $content[2] в PowerShell, чтобы увидеть значение третьего элемента массива. Это совершенно очевидно.

Чтобы получить последний элемент значения, не зная длины массива, используйте следующую команду: $content[$content.length-1] . Но есть и более короткая версия: $content[-1] . Для предпоследнего элемента используйте $content[-2] и т. д.

Похоже, вы дочитали пост до конца. Если вам понравилось, пожалуйста, поделитесь им. Вы очень поможете нашему блогу расти!

Автор: команда MFTNEXT

Проект MSFTNEXT – это небольшая команда авторов, которым нравится работать с новейшими технологиями и гаджетами. Будучи увлеченными Windows-блогерами, мы будем рады помочь другим решить их системные проблемы. Просмотреть все сообщения команды MFTNEXT

Оставить ответ Отменить ответ

сообщить об этом объявлении

269, 23

Как удалить последнюю строку, если она соответствует приведенной ниже строке, в противном случае никаких действий.

Проверка строки "END OF FILE. ROW COUNT: "

Тестировщик

12 296, 3 792

269, 23

Еще 10 обсуждений, которые могут вас заинтересовать

1. Программирование оболочки и создание сценариев

Как удалить предыдущую строку после совпадения с образцом?

Команда, я пишу сценарий оболочки для выполнения нескольких проверок работоспособности системы, где мне нужно удалить предыдущую строку в текстовом файле после сопоставления с шаблоном с помощью sed (или) awk. Не могли бы вы помочь мне в этом? Например, . (6 ответов)

Обсуждение начато: Nagaraj R

2. UNIX для чайников, вопросы и ответы

Найти строку, удалить строку и заменить новой строкой в ​​файле

Привет всем, у меня есть требование в ksh, где у меня есть набор файлов в каталоге. Мне нужно искать каждый файл, если в файле присутствует определенная строка, удалить эту строку и заменить эту строку другим строковым выражением в том же файле. Я очень новичок в юникс. Пожалуйста, помогите. (10 ответов)

Обсуждение начато: Прадхикшан

3. Программирование оболочки и создание сценариев

file.back mv file.back file done Удалить строку по шаблону в столбце

файл: 1|12322|буксировка| 5|23422|пау| 6|23423|корова| 3|34324|как| deletelines: 12322 23423 Моя команда для удаления строки при чтении NUM do awk -F"\|" '$2 !~ /`"$NUM"`/' файл >file.back mv file.back файл готово (3 ответа)

Обсуждение начато: Roozo

4. UNIX для чайников, вопросы и ответы

Awk соответствует столбцам и удаляет строку

Здравствуйте, у меня есть такой файл a 1 2 b 2 2 c 2 3 d 4 5 f 5 6 output a 1 2 c 2 3 d 4 5 f 5 6 По сути, я хочу удалить всю строку, если $2 и 3 доллара одинаковы. Спасибо (5 ответов)

Обсуждение начато: jacobs.smith

5. UNIX для продвинутых и опытных пользователей

Удалить строку точного соответствия из файла

Обсуждение начато: anyera

6. Программирование оболочки и создание сценариев

Удалить строку с совпадением и проблемой цитирования/экранирования предыдущей строки

Привет, у меня есть список записей LDAP в следующем формате: cat cmmac.export.tmp2 dn: deviceId=0a92746a54tbmd34b05758900131136a506,ou=devices,ou=customer,ou=nl,o=upc cmmac: 00:13: 11:36:a5:06 dn: deviceId=0a92746a62pbms4662299650015961cfa23,ou=устройства,ou=клиент,ou=nl,o=upc cmmac. (4 ответа)

Обсуждение начато: tomas.polak

7. Программирование оболочки и создание сценариев

Обсуждение начато: welcome_sed

8. Программирование оболочки и создание сценариев

Удалить строку строки по файлу данных соответствия 2.

Мне нужно удалить строки, совпадающие с данными файла 1 и данными 2, пожалуйста, помогите? data 1 4825307 4825308 4825248 4825309 4825310 4825311 4825336 data 2 4825248 0100362210 Time4Meal 39.00 41.73 MO & MT MT SMS 4825305 0100367565.

2 ответа)

Читайте также: