sed удалить строку по номеру

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

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

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

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

Синтаксис

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

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

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

Примеры Sed

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

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

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

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

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

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

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

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

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

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

Источник

Как удалить определенные строки из файла с помощью sed

Но давайте попробуем один файл несколько проще.

У нас есть файл distros-deb.txt который содержит это:

sed «3d» distros-deb.txt > distros-deb-ok.txt

Объяснить эту строку довольно просто, используя жаждущий «3d» мы указываем, что удалим строку №3 с distros-deb.txt Мы указываем, с каким файлом работать, то есть удаляем строку №3 этого файла, и до этого момента, если мы нажмем Enter, она покажет нам, что мы хотим, но в терминале, поэтому с > дистрибутив-деб-ок.txt мы указываем, что вместо отображения результата в терминале он помещает его в файл с этим именем.

Кроме того, мы можем избежать использования > дистрибутив-деб-ок.txt используя правильный параметр СЕПГ, параметр -i

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

Это удалит строку №3 из distros-deb.txt и сохранит ее.

Что, если мне нужен диапазон строк, то есть удалить строку №3, но также строки №4 и №5? Для этого мы ставим диапазон от 3 до 5, то есть:

И он покажет мне только debian и kubuntu 😀

Так что, если я хочу удалить строку со 2 до последней, когда я не знаю всего строк?

В случае, если вы хотите исключить из первой строки до # 4, мы просто помещаем значение 1 в начало:

Это было все, очень полезный совет, когда вы хотите создавать сценарии bash для автоматизации задач, и вам нужно изменить и удалить строки файлов конфигурации, чтобы изменить, мы можем использовать СЕПГ o Perl, а также для устранения мы уже знаем, как это сделать с помощью sed 😉

Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.

Полный путь к статье: Из Linux » Рекомендованный » Как удалить определенные строки из файла с помощью sed

Источник

Bash-скрипты, часть 7: sed и обработка текстов

В прошлый раз мы говорили о функциях в bash-скриптах, в частности, о том, как вызывать их из командной строки. Наша сегодняшняя тема — весьма полезный инструмент для обработки строковых данных — утилита Linux, которая называется sed. Её часто используют для работы с текстами, имеющими вид лог-файлов, конфигурационных и других файлов.

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Если вы, в bash-скриптах, каким-то образом обрабатываете данные, вам не помешает знакомство с инструментами sed и gawk. Тут мы сосредоточимся на sed и на работе с текстами, так как это — очень важный шаг в нашем путешествии по бескрайним просторам разработки bash-скриптов.

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Сейчас мы разберём основы работы с sed, а так же рассмотрим более трёх десятков примеров использования этого инструмента.

Основы работы с sed

Утилиту sed называют потоковым текстовым редактором. В интерактивных текстовых редакторах, наподобие nano, с текстами работают, используя клавиатуру, редактируя файлы, добавляя, удаляя или изменяя тексты. Sed позволяет редактировать потоки данных, основываясь на заданных разработчиком наборах правил. Вот как выглядит схема вызова этой команды:

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

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Простой пример вызова sed

Выше приведён примитивный пример использования sed, нужный для того, чтобы ввести вас в курс дела. На самом деле, sed можно применять в гораздо более сложных сценариях обработки текстов, например — для работы с файлами.

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

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Текстовый файл и результаты его обработки

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

Выполнение наборов команд при вызове sed

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

К каждой строке текста из файла применяются обе команды. Их нужно разделить точкой с запятой, при этом между окончанием команды и точкой с запятой не должно быть пробела.
Для ввода нескольких шаблонов обработки текста при вызове sed, можно, после ввода первой одиночной кавычки, нажать Enter, после чего вводить каждое правило с новой строки, не забыв о закрывающей кавычке:

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

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Другой способ работы с sed

Чтение команд из файла

Вот содержимое файла mycommands :

Вызовем sed, передав редактору файл с командами и файл для обработки:

Результат при вызове такой команды аналогичен тому, который получался в предыдущих примерах.

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

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

Флаги команды замены

Внимательно посмотрите на следующий пример.

Вот что содержится в файле, и что будет получено после его обработки sed.

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Исходный файл и результаты его обработки

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

Схема записи команды замены при использовании флагов выглядит так:

Выполнение этой команды можно модифицировать несколькими способами.

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Вызов команды замены с указанием позиции заменяемого фрагмента

Тут мы указали, в качестве флага замены, число 2. Это привело к тому, что было заменено лишь второе вхождение искомого шаблона в каждой строке. Теперь опробуем флаг глобальной замены — g :

Как видно из результатов вывода, такая команда заменила все вхождения шаблона в тексте.

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

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

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Использование флага команды замены p

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Сохранение результатов обработки текста в файл

Символы-разделители

Однако, выглядит всё это не очень-то хорошо. Всё дело в том, что так как прямые слэши используются в роли символов-разделителей, такие же символы в передаваемых sed строках приходится экранировать. В результате страдает читаемость команды.

К счастью, sed позволяет нам самостоятельно задавать символы-разделители для использования их в команде замены. Разделителем считается первый символ, который будет встречен после s :

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

Выбор фрагментов текста для обработки

До сих пор мы вызывали sed для обработки всего переданного редактору потока данных. В некоторых случаях с помощью sed надо обработать лишь какую-то часть текста — некую конкретную строку или группу строк. Для достижения такой цели можно воспользоваться двумя подходами:

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Обработка только одной строки, номер который задан при вызове sed

Второй вариант — диапазон строк:

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Обработка диапазона строк

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

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Обработка файла начиная со второй строки и до конца

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

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Обработка строк, соответствующих фильтру

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

Удаление строк

Вызов команды выглядит так:

Мы хотим, чтобы из текста была удалена третья строка. Обратите внимание на то, что речь не идёт о файле. Файл останется неизменным, удаление отразится лишь на выводе, который сформирует sed.

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Удаление третьей строки

Если при вызове команды d не указать номер удаляемой строки, удалены будут все строки потока.

Вот как применить команду d к диапазону строк:

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Удаление диапазона строк

А вот как удалить строки, начиная с заданной — и до конца файла:

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Удаление строк до конца файла

Строки можно удалять и по шаблону:

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Удаление строк по шаблону

При вызове d можно указывать пару шаблонов — будут удалены строки, в которых встретится шаблон, и те строки, которые находятся между ними:

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Удаление диапазона строк с использованием шаблонов

Вставка текста в поток

С помощью sed можно вставлять данные в текстовый поток, используя команды i и a :

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Теперь взглянем на команду a :

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Как видно, эти команды добавляют текст до или после данных из потока. Что если надо добавить строку где-нибудь посередине?

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Команда i с указанием номера опорной строки

Проделаем то же самое с командой a :

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Команда a с указанием номера опорной строки

Замена строк

Команда c позволяет изменить содержимое целой строки текста в потоке данных. При её вызове нужно указать номер строки, вместо которой в поток надо добавить новые данные:

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Замена строки целиком

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

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Замена строк по шаблону

Замена символов

Команда y работает с отдельными символами, заменяя их в соответствии с переданными ей при вызове данными:

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Используя эту команду, нужно учесть, что она применяется ко всему текстовому потоку, ограничить её конкретными вхождениями символов нельзя.

Вывод номеров строк

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Вывод номеров строк

Потоковый редактор вывел номера строк перед их содержимым.

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Вывод номеров строк, соответствующих шаблону

Чтение данных для вставки из файла

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Вставка в поток содержимого файла

Вот что произойдёт, если применить при вызове команды r шаблон:

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Использование шаблона при вызове команды r

Содержимое файла будет вставлено после каждой строки, соответствующей шаблону.

Пример

Решить эту задачу можно, воспользовавшись командами r и d потокового редактора sed:

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Замена указателя места заполнения на реальные данные

Итоги

Сегодня мы рассмотрели основы работы с потоковым редактором sed. На самом деле, sed — это огромнейшая тема. Его изучение вполне можно сравнить с изучением нового языка программирования, однако, поняв основы, вы сможете освоить sed на любом необходимом вам уровне. В результате ваши возможности по обработке с его помощью текстов будет ограничивать лишь воображение.

На сегодня это всё. В следующий раз поговорим о языке обработки данных awk.

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

Уважаемые читатели! А вы пользуетесь sed в повседневной работе? Если да — поделитесь пожалуйста опытом.

Источник

😡 Как удалить строки, соответствующие определенному шаблону в файле, используя SED

sed удалить строку по номеру. Смотреть фото sed удалить строку по номеру. Смотреть картинку sed удалить строку по номеру. Картинка про sed удалить строку по номеру. Фото sed удалить строку по номеру

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

SED – это потоковый редактор, который выполняет базовую фильтрацию текста и преобразования входного потока (файла или ввода из конвейера).

Удалить строки, соответствующие определенному шаблону в файле, используя SED

В нашем предыдущем руководстве мы рассмотрели, как удалять сктроки, соответствующие определенным шаблонам в VIM.

Вы можете проверить этот метод, перейдя по ссылке ниже;

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

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

Как и в VIM, мы будем использовать команду d для удаления определенного пространства шаблонов с помощью SED.

Для начала, если вы хотите удалить строку, содержащую ключевое слово, вы должны запустить sed, как показано ниже.

Например, удалите строку, содержащую ключевое слово green, которую вы запустите;

Удалить строки, содержащие несколько ключевых слов, например, удалить строки с ключевым словом green или строки с ключевым словом violet.

Удалить все строки, кроме тех, которые содержат определенный шаблон или ключевое слово;

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

Удалить строки, заканчивающиеся определенным шаблоном или символом, например, удалить строки, начинающиеся с символа o или ключевого слова amos;

Чтобы объединить вышеперечисленное, вы можете удалить строки, заканчивающиеся буквой o или ключевым словом amos;

Удалить пустые строки

Удалить пустые строки или строки, содержащие один или несколько пробелов;

Удалить пустые строки или строки, которые на одной или нескольких вкладках;

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

Не стесняйтесь добавлять больше примеров и предложений в комментариях ниже.

Источник

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

Я хочу удалить один или несколько конкретных номеров строк из файла. Как бы я сделал это с помощью sed?

6 ответов:

Если вы хотите удалить строки с 5 по 10 и 12:

выводит результаты на экран. Если вы хотите сохранить результаты в тот же файл:

это создаст резервную копию файла до file.bak и удалить данной линии.

вы можете удалить одну строку с ее номером строки sed-i ’33d’ file

это приведет к удалению строки на 33 номер строки и сохранить обновленный файл.

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

(где deletelines это утилита, которую вы воображаете, что вам нужно) то же самое, что и

это принимает файл номеров строк, по одному на строку, и производит, на стандартном выходе, те же номера строк с d добавляются после каждого. Это действительно sed скрипт, который мы можем сохранить в файл, или (на некоторых платформах) трубу в другой sed например:

Я хотел бы предложить обобщение с awk.

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

в этом примере размер блока составляет 2000, и я хочу напечатать строки [1..713] и [1026..1029].

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *