Команда «Sed» в Linux: описание полезных приложений

Вам когда-нибудь приходилось очень быстро заменить текст в файле? Затем вам нужно открыть текстовый редактор, найти строку и ввести замену. Что делать, если вам придется делать это много раз? Что, если это не одно и то же, и вам придется выполнить несколько поисков и заменить каждое вхождение? Это очень быстро надоедает, но есть лучший способ сделать это с помощью инструмента под названием СЭД.

Мы написали о POSIX и рассмотрели некоторые интерфейсы и утилиты, которые система должна предоставлять, чтобы быть совместимой с POSIX. Инструмент командной строки СЭД — одна из тех утилит, которые предоставляют многофункциональный способ фильтрации, поиска, замены и изменения порядка данных в текстовых файлах. Это чрезвычайно мощный инструмент, с которым очень легко начать работу, но очень трудно изучить его до конца из-за, казалось бы, бесконечного количества функций.

Во-первых, следует отметить, что реализация GNU СЭДНесмотря на то, что он совместим с POSIX, он выходит за рамки спецификации и предоставляет расширения и функции, не описанные в требованиях POSIX. При вызове СЭД вы захотите использовать –posix флаг, чтобы отключить все расширения, специфичные для GNU, и обеспечить большую переносимость. Это ключевой момент при написании сценариев, которые вы собираетесь запускать на различных платформах. Например, набор инструментов, поставляемый с macOS, не будет соответствовать инструментам GNU, как и те, которые обычно присутствуют в *BSD.

Как использовать СЭД команда в Linux?

Общий синтаксис следующий

СЭД [OPTION]… {скрипт-только-если-нет-другого-скрипта} [input-file]…

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

Есть несколько разных режимов, которые СЭД могут работать, некоторые можно комбинировать. Мы рассмотрим только основы, но они по-прежнему очень эффективны и становятся еще более важными по мере того, как вы развиваете свои знания в области СЭД и регулярные выражения.

  • p – Печать – печатает строки с соответствующим текстом.
  • d – Удалить – удаляет строки с совпадающим текстом.
  • s – Substitute – заменяет или заменяет соответствующий текст в каждой строке.

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

Читайте также: Команда Cut в Linux: описание полезных приложений

Некоторый СЭД командные флаги (в отличие от флагов шаблонов) мы будем использовать следующие:

  • n – подавляет автоматическую печать несовпадающего текста
  • E/r – включает расширенные регулярные выражения.
  • i – редактирует файл на месте, а не выводит на экран

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

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

sed -n ‘2,10p’ myfile.txt

Мы указали строки со 2 по 10 для печати. Синтаксис в СЭД странно, но это эффективно. Мы используем установите здесь флажок, чтобы убедиться, что печатается только это совпадение, в противном случае будут напечатаны все строки, а те, которые соответствуют, будут продублированы.

ПРИМЕЧАНИЕ. В СЭДстроки начинаются с 1, а не с 0.

И наоборот, мы можем удалить те же строки.

sed ‘2,10d’ myfile.txt

Поскольку мы показываем не только те, которые совпадают, мы хотим удалить наши флаг, чтобы наши строки печатались.

Эти примеры очень надуманны, поэтому трудно понять, насколько это может быть полезно, но мы к этому доберемся.

Далее мы можем начать заменять вхождения определенного шаблона в строке. Это особенно полезно для системных администраторов. Всякий раз, когда я устанавливаю Linux на новую машину, я хочу включить sshd, но хочу убедиться, что пользователь root не может войти в систему.

sed -i ‘s/[#]PermitRootLogin да/PermitRootLogin нет/g’ /etc/ssh/sshd_config

Эта команда выполнит поиск /etc/ssh/sshd_config для строки, содержащей #PermitRootLogin да (с # или без него) и измените его на PermitRootЛогин нет на месте. Скобки допускают дополнительное сопоставление, что очень эффективно. Разные дистрибутивы поставляются с разными настройками по умолчанию, так что это очень удобно.

ПРИМЕЧАНИЕ. Будьте очень осторожны при использовании пометьте, так как вы можете легко потерять работу или разрушить конфигурацию системы.

Здесь мы можем объединить несколько различных функций в СЭД.

sed ‘2,10{s/hello/Hello/;}’ myfile.txt

Это несколько более продвинутый вариант. То, что мы здесь делаем, говорит СЭД чтобы запустить команду в строках со 2 по 10. То же самое можно сделать для печати или удаления всех строк с определенным соответствием шаблону.

В нем много функций СЭД и мы не сможем охватить их все. Если вам понравился этот урок, дайте нам знать, и мы обязательно сделаем еще. Покажите нам некоторые из ваших любимых СЭД команды в комментариях и не стесняйтесь запрашивать дополнительные руководства по командам.

Читайте также: Полный список команд Linux от А до Я | Справочник по командной строке Linux

Похожие записи

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

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