Команда 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 .
Заинтересованы в масштабировании запуска вашего программного обеспечения? Ознакомьтесь с разделом Схема.