Поиск по сайту:

Как изменить текст с помощью регулярных выражений с помощью редактора sed Stream


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

Регулярные выражения в командной строке

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

Чтобы проверить, доступен ли sed в вашем дистрибутиве Linux, введите sed --version в командной строке:

Не волнуйтесь, если ваша версия немного старше той, что показана здесь. Это почти наверняка подойдет для примеров, которые мы здесь обсуждаем. Если инструмент недоступен в вашем дистрибутиве, вы можете установить его с помощью sudo apt install sed для операционных систем на базе Ubuntu/Debian или sudo yum install sed для RedHat/RPM. на базе операционных систем.

sed применяет преобразование небольшого текста с помощью так называемого RegEx или регулярного выражения. Регулярное выражение — это форма и метод выражения более сложных текстовых операций поиска, замены и изменения в удобном для восприятия формате. Регулярные выражения сложны и могут быть трудны для чтения новичками. Вы можете прочитать наше руководство, Как вы на самом деле используете Regex, для получения дополнительной информации о том, как читать и писать Regex.

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

Как видите, мы отобразили небольшой фрагмент текста, а затем преобразовали его с помощью инструмента sed. Мы воспользовались командой «s» (подстановка) sed и указали, что мы хотим изменить. Вы можете прочитать это по-другому, как s|from|to|, где «|» — это разделитель между разделами/полями, «s» — это команда, а «от» и «до» — два параметры, переданные команде 's'.

Таким образом, мы преобразовали фразу «Здравствуйте, фанаты Cloud Savvy IT!» в «Здравствуйте, поклонники cloudavvyit.com!», изменив только часть текста с помощью потокового редактора sed. Возьмем чуть более сложный пример.

Здесь мы сначала создаем файл с 3 строками, используя команду echo с перенаправлением в файл ('>' создает новый файл, перезаписывая файл с таким же именем, если он существует, и '>>' добавляется к файлу, не изменяя его иным образом). Затем мы отобразили содержимое файла с помощью команды cat.

Затем мы напрямую преобразовали содержимое файла с помощью инструмента sed. Для этого мы указали параметр «-i» для sed, который редактирует файл на месте. Фактическая инструкция преобразования текста такая же, как и раньше. И, наконец, мы указываем имя файла в конце команды. Затем мы проверяем содержимое файла и замечаем, как изменился наш ввод.

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

Давайте немного оживим ситуацию, расширив наше регулярное выражение и метод написания инструкции преобразования текста sed:

В этом примере мы заменили букву «h» на «_H», и мы сделали это в глобальном (обратите внимание на квалификатор «g» в конце первой инструкции, переданной в sed) и без учета регистра (обратите внимание на «i» квалификатор также ближе к концу первой инструкции). «h» соответствует, даже если файл содержит «H» из-за квалификатора «i».

Затем мы начали новую инструкцию (инструкции заканчиваются символом «;», как и во многих других языках кодирования), в которой мы удалили «.com», в основном выполнив поиск и заменив его ничем.

Обратите также внимание на то, как мы использовали разные разделители параметров поля/команды. В первом примере мы использовали «|», который в целом является простым в использовании и довольно необычным разделителем полей. Многие люди используют «/», хотя это может привести к проблемам при анализе имен путей, которые часто содержат «/».

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

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

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

В этом примере мы создали файл с 5 строками, а затем использовали немного сложную инструкцию sed для вставки разделителя «-» после каждой второй строки. Хотя синтаксис в основном объясняет сам себя, интересно отметить, что команда «r» (чтение/добавление текста из файла) указывает имя файла для вставки непосредственно и все еще внутри основной инструкции без каких-либо разделителей.

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

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

В этом примере мы ищем текст «3» и для этой строки заменяем «C» на «Z». Вы видите, насколько универсальным может быть sed.

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

Как видите, мы создали 3 файла и запросили список каталогов с помощью команды ls. Затем мы взяли этот вывод в качестве входных данных для sed (используя команду Linux pipe «|») и преобразовали часть нашего списка каталогов в символ подчеркивания.

Редактор потока sed — это универсальный инструмент, который может помочь вам анализировать и преобразовывать практически любой текст непосредственно из командной строки терминала, независимо от того, поступает ли ввод из простого оператора echo, других инструментов Linux или из плоского кода. текстовый файл. Наслаждайтесь!