Linux удаляет первую строку из файла

Обновлено: 18.05.2024

Вы можете использовать «редактор потока для фильтрации и преобразования текста» sed. Здесь -i означает редактирование файла на месте. d — команда «удалить пространство шаблонов; немедленно начать следующий цикл».

Как удалить строку из файла в Unix?

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

Как удалить первые 10 строк в Unix?

  1. Параметры sed -i и gawk v4.1 -i -inplace в основном создают временный файл за кулисами. IMO sed должен быть быстрее, чем tail и awk. – …
  2. tail для этой задачи в несколько раз быстрее, чем sed или awk . (конечно, не подходит для этого вопроса по-настоящему на месте) thanasisp 22 сен.

Как удалить последнюю строку в Unix?

Теперь просто дважды нажмите d на клавиатуре. Это сделает именно то, что вы хотите — удалить последнюю строку. После этого нажмите :, затем x и нажмите Enter .

Как удалить последние 10 строк в Unix?

Удалить последние N строк файла в Linux

Как удалить строку в CMD?

2 ответа. Клавиша Escape (Esc) очистит строку ввода. Кроме того, нажатие Ctrl+C переместит курсор на новую пустую строку.

Как удалить текст в Linux?

  1. Чтобы удалить один файл, используйте команду rm или unlink, за которой следует имя файла: unlink filename rm filename. …
  2. Чтобы удалить сразу несколько файлов, используйте команду rm, за которой следует имя файла, разделенное пробелом. …
  3. Используйте rm с параметром -i для подтверждения каждого файла перед его удалением: rm -i имя(я) файла(ов)

Как удалить несколько строк в Unix?

  1. Нажмите клавишу Esc, чтобы перейти в обычный режим.
  2. Поместите курсор на первую строку, которую хотите удалить.
  3. Введите 5dd и нажмите Enter, чтобы удалить следующие пять строк.

Как удалить линию между двумя шаблонами Unix?

  1. Используйте следующую команду, чтобы удалить строки, лежащие между ШАБЛОН-1 и ШАБЛОН-2, исключая строки, содержащие эти шаблоны: …
  2. Используйте следующую команду, чтобы удалить строки, лежащие между ШАБЛОН-1 и ШАБЛОН-2, включая строки, содержащие эти шаблоны: …
  3. Чтобы удалить все строки после ШАБЛОНА-2, используйте это.

Как удалить диапазон строк в Linux?

Android построен на основе системы ядра Linux. Вариантами Linux являются debian, fedora и open SUSE. Однако эта команда просто печатает строки на терминале и не удаляет их из файла. Чтобы удалить строки из исходного файла, используйте параметр -i команды sed.

Как подсчитать количество строк в файле в Linux?

Самый простой способ подсчитать количество строк, слов и символов в текстовом файле — использовать команду Linux «wc» в терминале. Команда «wc» в основном означает «количество слов», и с различными необязательными параметрами ее можно использовать для подсчета количества строк, слов и символов в текстовом файле.

Как удалить первую N строку из файла?

  1. 1 перейти на первую строку.
  2. 5 выберите 5 строк.
  3. удалить.
  4. x сохранить и закрыть.

Что такое sed-скрипт?

Обзор сценария sed 3.1

Программа sed состоит из одной или нескольких команд sed, передаваемых одним или несколькими параметрами -e , -f , --expression и --file или первым аргументом, не являющимся параметром, если не используется ни один из этих параметров. . … [адрес] может быть номером одной строки, регулярным выражением или диапазоном строк (см. адреса sed).

Мне нужно несколько раз удалить первую строку из огромного текстового файла с помощью скрипта bash.

Сейчас я использую sed -i -e "1d" $FILE, но удаление занимает около минуты.

Есть ли более эффективный способ добиться этого?

tail НАМНОГО МЕДЛЕННЕЕ, чем sed. хвосту нужно 13,5 с, sed нужно 0,85 с. В моем файле ~ 1 млн строк, ~ 100 МБ. MacBook Air 2013 года с твердотельным накопителем.

17 ответов 17

-n x : просто напечатать последние x строк. tail -n 5 даст вам последние 5 строк ввода. Знак + инвертирует аргумент и заставляет хвост печатать что угодно, кроме первых строк x-1. tail -n +1 напечатает весь файл, tail -n +2 все, кроме первой строки и т. д.

tail GNU намного быстрее, чем sed . tail также доступен в BSD, а флаг -n +2 одинаков для обоих инструментов. Дополнительную информацию см. на справочных страницах FreeBSD или OS X.

Однако версия BSD может быть намного медленнее, чем sed . Интересно, как им это удалось; tail должен просто читать файл построчно, в то время как sed выполняет довольно сложные операции, включая интерпретацию скрипта, применение регулярных выражений и тому подобное.

Примечание: у вас может возникнуть соблазн использовать

но это даст вам пустой файл.Причина в том, что перенаправление ( > ) происходит до того, как оболочка вызывает хвост:

  1. Shell обрезает файл $FILE
  2. Shell создает новый процесс для tail
  3. Shell перенаправляет стандартный вывод хвостового процесса в $FILE
  4. tail читает из уже пустого $FILE

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

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

@Eddie: user869097 сказал, что это не работает, когда одна строка занимает 15 МБ или больше. Пока строки короче, хвост будет работать для любого размера файла.

@Dreampuf - со страницы руководства: -n N означает вывод последних N строк вместо последних 10; или используйте +N для вывода строк, начинающихся с N-ой

Я собирался согласиться с @JonaChristopherSahnwaldt — tail намного, намного медленнее, чем вариант sed, на порядок. Я тестирую его на файле из 500 000 тысяч строк (не более 50 символов в строке). Однако затем я понял, что использую версию tail для FreeBSD (которая по умолчанию поставляется с OS X). Когда я переключился на хвост GNU, вызов tail был в 10 раз быстрее, чем вызов sed (и вызов GNU sed тоже). AaronDigulla здесь прав, если вы используете GNU.

Вы можете использовать -i для обновления файла без использования оператора '>'. Следующая команда удалит первую строку из файла и сохранит ее в файле (за кулисами используется временный файл).

Напоминаем, что Mac требует указания суффикса при использовании sed с редактированием на месте. Так что запустите выше с -i.bak

Эта версия действительно намного читабельнее и универсальнее, чем tail -n +2 . Не уверен, почему это не лучший ответ.

Для тех, кто использует SunOS, не относящуюся к GNU, поможет следующий код:

Это легко сделать с помощью:

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

Технически параметр -i принимает аргумент, указывающий суффикс файла, который следует использовать при создании резервной копии файла (например, sed -I .bak 1d имя файла создает копию исходного файла с именем имя_файла.bak с неповрежденной первой строкой) . В то время как GNU sed позволяет вам указать -i без аргумента, чтобы пропустить резервное копирование, BSD sed, найденный в macOS, требует аргумента пустой строки в качестве отдельного слова оболочки (например, sed -i '' . ).

Нет, это максимально эффективно. Вы могли бы написать программу на C, которая могла бы выполнять эту работу немного быстрее (меньше времени запуска и обработки аргументов), но она, вероятно, будет стремиться к той же скорости, что и sed, поскольку файлы становятся большими (и я предполагаю, что они большие, если это занимает минуту ).

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

Например, если это файл A, который обрабатывает другая программа B, одним из решений будет не удалять первую строку, а модифицировать программу B, чтобы она обрабатывалась по-другому.

Допустим, все ваши программы присоединяются к этому файлу A, а программа B в настоящее время читает и обрабатывает первую строку перед ее удалением.

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

Затем, в спокойное время (в полночь?), он может выполнить специальную обработку файла A, чтобы удалить все обрабатываемые в данный момент строки и установить смещение обратно на 0.

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

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

Как удалить одну строку в Linux?

  1. Нажмите клавишу Esc, чтобы перейти в обычный режим.
  2. Поместите курсор на строку, которую хотите удалить.
  3. Введите dd и нажмите Enter, чтобы удалить строку.

Как удалить первую строку в Unix?

  1. Удалить первую строку файла sed ‘1d’.
  2. Удалить первую и третью строки файла sed ‘1d3d’.

Как удалить первые 10 строк в Unix?

Удалить первые N строк файла на месте в командной строке unix

  1. Параметры sed -i и gawk v4.1 -i -inplace в основном создают временный файл за кулисами. IMO sed должен быть быстрее, чем tail и awk. – …
  2. tail для этой задачи в несколько раз быстрее, чем sed или awk . (конечно, не подходит для этого вопроса по-настоящему на месте) thanasisp 22 сен.

Как удалить последние 10 строк в Unix?

Удалить последние N строк файла в Linux

Как удалить линию между двумя шаблонами Unix?

  1. Используйте следующую команду, чтобы удалить строки, лежащие между ШАБЛОН-1 и ШАБЛОН-2, исключая строки, содержащие эти шаблоны: …
  2. Используйте следующую команду, чтобы удалить строки, лежащие между ШАБЛОН-1 и ШАБЛОН-2, включая строки, содержащие эти шаблоны: …
  3. Чтобы удалить все строки после ШАБЛОНА-2, используйте это.

Как удалить строку в CMD?

2 ответа. Клавиша Escape (Esc) очистит строку ввода. Кроме того, нажатие Ctrl+C переместит курсор на новую пустую строку.

Как удалить строку grep?

Чтобы удалить общие линии между двумя файлами, вы можете использовать команду grep , comm или join. grep работает только с небольшими файлами. Используйте -v вместе с -f . Отображает строки из файла1, которые не совпадают ни с одной строкой в ​​файле2.

В чем разница между восстановлением и удалением?

Команда «Восстановить» (y) идентична команде «Удалить» (d), за исключением того, что она не удаляет текст из рабочего буфера. Редактор vim помещает копию извлеченного текста в буфер общего назначения. Затем вы можете использовать команду «Поместить», чтобы поместить другую копию в другое место рабочего буфера.

Как очистить файл в Linux?

  1. Чтобы удалить один файл, используйте команду rm или unlink, за которой следует имя файла: unlink filename rm filename. …
  2. Чтобы удалить сразу несколько файлов, используйте команду rm, за которой следует имя файла, разделенное пробелом. …
  3. Используйте rm с параметром -i для подтверждения каждого файла перед его удалением: rm -i имя(я) файла(ов)

Как редактировать строки в vi?

Как удалить первую строку в Python?

Что делает SED 1d?

3 ответа. В sed : опция -i будет редактировать входной файл на месте. «1d» удалит первую строку входного файла.

Как вставить первую строку в Unix?

Используйте параметр вставки ( i ) команды sed, который вставит текст в предыдущую строку. Также обратите внимание, что некоторые реализации sed, отличные от GNU (например, в macOS), требуют аргумента для флага -i (используйте -i ", чтобы получить тот же эффект, что и с GNU sed").

редактор потоковой передачи (sed) — важный инструмент при работе с анализом и преобразованием текста в системах на базе nix. Он используется для поиска, фильтрации, подстановки текста и манипуляций с текстом, таких как вставка, удаление, замена и поиск в текстовых файлах.

В большинстве дистрибутивов Linux команда sed предустановлена, и вы можете проверить ее с помощью следующих команд, которые покажут двоичное расположение команды и версию.

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

Как удалить строку из файла

Чтобы удалить строку из файла, вы можете использовать приведенную ниже команду. Вы должны заменить «N» номером строки, а «d» — удалить строку.

Если вам нужно удалить четвертую строку из файла, вы должны заменить N=4 .

Удалить строку из файла

Удалить строку из файла

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

Вы можете удалить первую строку из файла, используя тот же синтаксис, что и в предыдущем примере. Вы должны указать N=1, чтобы удалить первую строку.

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

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

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

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

Вы можете удалить диапазон строк из файла. Допустим, вы хотите удалить строки с 3 по 5, вы можете использовать приведенный ниже синтаксис.

  • M – номер начальной строки
  • N – номер конечной строки.

Чтобы действительно удалить, используйте следующую команду.

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

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

Вы можете использовать ! символ для отмены операции удаления. Это удалит все строки, кроме заданного диапазона (3-5).

Отменить операцию

Отменить операцию

Как удалить пустые строки из файла

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

 Строки с не удаленными пробелами

Строки с не удаленными пробелами

На изображении выше видно, что пустые строки удаляются, но строки с пробелами не удаляются. Чтобы удалить все строки, включая пробелы, вы можете запустить следующую команду.

Строки с Пробелы удалены

Строки с удаленными пробелами

Как удалить строки, начинающиеся со слов в файле

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

Чтобы удалить строку, заканчивающуюся определенным словом, выполните следующую команду. Слово, которое нужно удалить, за которым следует символ $, приведет к удалению строк.

Удалить строку, начинающуюся со слов в файле

Удалить строку, начинающуюся со слов в файле

Как внести изменения непосредственно в файл

Чтобы внести изменения непосредственно в файл с помощью sed, необходимо передать флаг -i, который внесет изменения непосредственно в файл.

Мы подошли к концу статьи. Команда sed будет играть важную роль, когда вы работаете с любыми файлами. В сочетании с другими утилитами Linux, такими как awk и grep, с помощью sed можно делать больше.

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