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. Её часто используют для работы с текстами, имеющими вид лог-файлов, конфигурационных и других файлов.
Если вы, в bash-скриптах, каким-то образом обрабатываете данные, вам не помешает знакомство с инструментами sed и gawk. Тут мы сосредоточимся на sed и на работе с текстами, так как это — очень важный шаг в нашем путешествии по бескрайним просторам разработки bash-скриптов.
Сейчас мы разберём основы работы с sed, а так же рассмотрим более трёх десятков примеров использования этого инструмента.
Основы работы с sed
Утилиту sed называют потоковым текстовым редактором. В интерактивных текстовых редакторах, наподобие nano, с текстами работают, используя клавиатуру, редактируя файлы, добавляя, удаляя или изменяя тексты. Sed позволяет редактировать потоки данных, основываясь на заданных разработчиком наборах правил. Вот как выглядит схема вызова этой команды:
Вот что получится при выполнении этой команды.
Простой пример вызова sed
Выше приведён примитивный пример использования sed, нужный для того, чтобы ввести вас в курс дела. На самом деле, sed можно применять в гораздо более сложных сценариях обработки текстов, например — для работы с файлами.
Ниже показан файл, в котором содержится фрагмент текста, и результаты его обработки такой командой:
Текстовый файл и результаты его обработки
Здесь применён тот же подход, который мы использовали выше, но теперь sed обрабатывает текст, хранящийся в файле. При этом, если файл достаточно велик, можно заметить, что sed обрабатывает данные порциями и выводит то, что обработано, на экран, не дожидаясь обработки всего файла.
Выполнение наборов команд при вызове sed
К каждой строке текста из файла применяются обе команды. Их нужно разделить точкой с запятой, при этом между окончанием команды и точкой с запятой не должно быть пробела.
Для ввода нескольких шаблонов обработки текста при вызове sed, можно, после ввода первой одиночной кавычки, нажать Enter, после чего вводить каждое правило с новой строки, не забыв о закрывающей кавычке:
Вот что получится после того, как команда, представленная в таком виде, будет выполнена.
Другой способ работы с sed
Чтение команд из файла
Вот содержимое файла mycommands :
Вызовем sed, передав редактору файл с командами и файл для обработки:
Результат при вызове такой команды аналогичен тому, который получался в предыдущих примерах.
Использование файла с командами при вызове sed
Флаги команды замены
Внимательно посмотрите на следующий пример.
Вот что содержится в файле, и что будет получено после его обработки sed.
Исходный файл и результаты его обработки
Команда замены нормально обрабатывает файл, состоящий из нескольких строк, но заменяются только первые вхождения искомого фрагмента текста в каждой строке. Для того, чтобы заменить все вхождения шаблона, нужно использовать соответствующий флаг.
Схема записи команды замены при использовании флагов выглядит так:
Выполнение этой команды можно модифицировать несколькими способами.
Вызов команды замены с указанием позиции заменяемого фрагмента
Тут мы указали, в качестве флага замены, число 2. Это привело к тому, что было заменено лишь второе вхождение искомого шаблона в каждой строке. Теперь опробуем флаг глобальной замены — g :
Как видно из результатов вывода, такая команда заменила все вхождения шаблона в тексте.
Как результат, при запуске sed в такой конфигурации на экран выводятся лишь строки (в нашем случае — одна строка), в которых найден заданный фрагмент текста.
Использование флага команды замены p
Сохранение результатов обработки текста в файл
Символы-разделители
Однако, выглядит всё это не очень-то хорошо. Всё дело в том, что так как прямые слэши используются в роли символов-разделителей, такие же символы в передаваемых sed строках приходится экранировать. В результате страдает читаемость команды.
К счастью, sed позволяет нам самостоятельно задавать символы-разделители для использования их в команде замены. Разделителем считается первый символ, который будет встречен после s :
В данном случае в качестве разделителя использован восклицательный знак, в результате код легче читать и он выглядит куда опрятнее, чем прежде.
Выбор фрагментов текста для обработки
До сих пор мы вызывали sed для обработки всего переданного редактору потока данных. В некоторых случаях с помощью sed надо обработать лишь какую-то часть текста — некую конкретную строку или группу строк. Для достижения такой цели можно воспользоваться двумя подходами:
Обработка только одной строки, номер который задан при вызове sed
Второй вариант — диапазон строк:
Обработка диапазона строк
Кроме того, можно вызвать команду замены так, чтобы файл был обработан начиная с некоей строки и до конца:
Обработка файла начиная со второй строки и до конца
Для того, чтобы обрабатывать с помощью команды замены только строки, соответствующие заданному фильтру, команду надо вызвать так:
Обработка строк, соответствующих фильтру
Тут мы использовали очень простой фильтр. Для того, чтобы в полной мере раскрыть возможности данного подхода, можно воспользоваться регулярными выражениями. О них мы поговорим в одном из следующих материалов этой серии.
Удаление строк
Вызов команды выглядит так:
Мы хотим, чтобы из текста была удалена третья строка. Обратите внимание на то, что речь не идёт о файле. Файл останется неизменным, удаление отразится лишь на выводе, который сформирует sed.
Удаление третьей строки
Если при вызове команды d не указать номер удаляемой строки, удалены будут все строки потока.
Вот как применить команду d к диапазону строк:
Удаление диапазона строк
А вот как удалить строки, начиная с заданной — и до конца файла:
Удаление строк до конца файла
Строки можно удалять и по шаблону:
Удаление строк по шаблону
При вызове d можно указывать пару шаблонов — будут удалены строки, в которых встретится шаблон, и те строки, которые находятся между ними:
Удаление диапазона строк с использованием шаблонов
Вставка текста в поток
С помощью sed можно вставлять данные в текстовый поток, используя команды i и a :
Теперь взглянем на команду a :
Как видно, эти команды добавляют текст до или после данных из потока. Что если надо добавить строку где-нибудь посередине?
Команда i с указанием номера опорной строки
Проделаем то же самое с командой a :
Команда a с указанием номера опорной строки
Замена строк
Команда c позволяет изменить содержимое целой строки текста в потоке данных. При её вызове нужно указать номер строки, вместо которой в поток надо добавить новые данные:
Замена строки целиком
Если воспользоваться при вызове команды шаблоном в виде обычного текста или регулярного выражения, заменены будут все соответствующие шаблону строки:
Замена строк по шаблону
Замена символов
Команда y работает с отдельными символами, заменяя их в соответствии с переданными ей при вызове данными:
Используя эту команду, нужно учесть, что она применяется ко всему текстовому потоку, ограничить её конкретными вхождениями символов нельзя.
Вывод номеров строк
Вывод номеров строк
Потоковый редактор вывел номера строк перед их содержимым.
Вывод номеров строк, соответствующих шаблону
Чтение данных для вставки из файла
Вставка в поток содержимого файла
Вот что произойдёт, если применить при вызове команды r шаблон:
Использование шаблона при вызове команды r
Содержимое файла будет вставлено после каждой строки, соответствующей шаблону.
Пример
Решить эту задачу можно, воспользовавшись командами r и d потокового редактора sed:
Замена указателя места заполнения на реальные данные
Итоги
Сегодня мы рассмотрели основы работы с потоковым редактором sed. На самом деле, sed — это огромнейшая тема. Его изучение вполне можно сравнить с изучением нового языка программирования, однако, поняв основы, вы сможете освоить sed на любом необходимом вам уровне. В результате ваши возможности по обработке с его помощью текстов будет ограничивать лишь воображение.
На сегодня это всё. В следующий раз поговорим о языке обработки данных awk.
Уважаемые читатели! А вы пользуетесь 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].