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

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

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

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

Начнем с краткого обзора основного синтаксиса команды sed.

Базовая структура команды sed следующая:

sed 's/old_text/new_text/' file.txt

Эта команда заменит первое вхождение old_text на new_text в каждой строке file.txt. s в команде означает «заменить».

Команду sed также можно использовать для замены всех вхождений указанного шаблона в каждой строке. Чтобы выполнить глобальную замену, просто добавьте флаг g в конец команды замены:

sed 's/old_text/new_text/g' file.txt

Еще одно мощное применение sedпреобразование текста на основе указанного диапазона строк. Это можно сделать, указав диапазон строк перед командой подстановки:

sed '1,4 s/old_text/new_text/g' file.txt

Эта команда заменит все вхождения old_text на new_text в строках с 1 по 4 строки file.txt.

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

sed '/regex_pattern/d' file.txt

Это удалит все строки, которые соответствуют regex_pattern в file.txt.

sed также поддерживает множество расширенных параметров, таких как условные команды. Например, вы можете использовать параметр -n, чтобы ограничить вывод по умолчанию и печатать только те строки, которые соответствуют указанному шаблону:

sed -n '/regex_pattern/p' file.txt

Это напечатает только те строки, которые соответствуют regex_pattern в file.txt.

Например, у нас есть thisfile.txt :

Рассмотрим следующий текстовый файл file.txt:

apple
banana
cherry
durian
etrog
feijoa

Если мы запустим следующую команду sed:

sed -n '/^[ace].*/p' file.txt

Вывод будет:

apple
cherry
etrog

Здесь ^[ace].* — это regex_pattern, который соответствует строкам, начинающимся со строчной буквы между a, c и e и имеющим ноль или более символов после этого символа (.*). Параметр -n используется для уменьшения вывода и печати только тех строк, которые соответствуют указанному regex_pattern (в данном случае /^[ace].*/p).

Таким образом, приведенная выше команда sed будет выводить только слова, соответствующие указанному шаблону, а именно apple , cherry и etrog.

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

sed -i 's/old_text/new_text/g' file.txt

Это также заменит все вхождения old_text на new_text в file.txt и сохранит все изменения в файле.

В некоторых случаях может потребоваться выполнить один или несколько шаблонов sed, мы можем использовать параметр -e для передачи нескольких:

sed -e 's/hello/bye/g' -e 's/world/earth/g' file.txt

Это довольно интуитивно понятно.

Чувствуете, что включение этих sed команд в шаги развертывания недостаточно удобно (даже с опцией -e)? Вот что вы можете сделать с sed . Создайте файл sed (например, substitute.sed), и поместите все наши команды sed в:

s/hello/bye/g
s/world/earth/g

… то мы можем выполнить команду с этим sed файлом:

Если мы запустим следующую команду sed:

sed -f substitute.sed file.txt

Вывод файла file.txt будет заменен в соответствии с выражениями, которые вы определили в этомsubstitute.sed .

Вот и все для сегодняшней статьи! Я надеюсь, что вы найдете это полезным как инженер-программист или системный администратор. Если вы хотите читать больше подобных статей, подписывайтесь на меня на Medium! Ваше здоровье.

Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .

Заинтересованы в масштабировании запуска вашего программного обеспечения? Ознакомьтесь с разделом Схема.