Вы искали другой способ выполнения операций редактирования текста? Вам сюда! Этот учебник поможет вам разобраться с примерами использования потокового редактора sed.
Вкратце, sed позволяет выполнять широкий спектр редакционных операций с файлами и потоками текста в неинтерактивном режиме. Вы принимаете решения о редактировании при вызове команд. И в этом учебнике вы узнаете, как использовать команды sed и эффективно оптимизировать свой рабочий процесс.
Читайте дальше и повышайте свои навыки работы в командной строке!
Предварительные требования
Убедитесь, что у вас есть следующее, чтобы следовать за практическим демонстрационным материалом в этом учебнике:
- A command line interface (e.g., Terminal on macOS or Linux) – This tutorial uses Ubuntu Linux 20.04, but the commands should work on most popular operating systems.
- A text editor (e.g., nano, vi, or Sublime Text) – This tutorial uses Nano.
Установка sed на Ubuntu
Обычно sed включен в стандартный набор утилит в большинстве операционных систем Unix-подобных систем, включая Linux и macOS. Но в любом случае стоит проверить, установлен ли у вас sed, и это базовая процедура перед выполнением трансформаций текста.
1. Откройте терминал и выполните следующую команду sed
, чтобы проверить, установлена ли у вас sed версии.
Если sed установлен, вы увидите номер версии sed и некоторую информацию о сборке, как показано ниже.

В противном случае вы увидите сообщение об ошибке ниже, если `sed` не установлен.
Это сообщение об ошибке указывает на то, что команда sed
не найдена в переменной среды PATH вашей системы.

2. Затем выполните [apt-get update
нижеприведенную команду, чтобы обновить и установить sed
на вашей системе.
Эта команда получает последнюю информацию о пакетах из настроенных источников пакетов, включая зависимости, файлы и скрипты пакета. Запуск этой команды необходим, чтобы убедиться, что вы устанавливаете последнюю версию `sed` и любые другие необходимые пакеты.

3. Наконец, выполните следующую команду, чтобы проверить, установлена ли команда sed
на вашей системе.
Эта команда печатает полный путь к исполняемому файлу `sed`, который в этом примере – /usr/bin/sed.
Как только вы установите `sed` и проверите, что он есть в вашем PATH, вы можете использовать sed
команду для выполнения различных преобразований и манипуляций с текстом.

Замена строк в текстовом файле
`sed` – популярный потоковый редактор, доступный в большинстве операционных систем Unix-подобных, и одна из самых удобных функций `sed` – это замена строк в текстовом файле.
Ниже приведены некоторые сценарии, но не ограничиваются ими, где замена строк полезна:
- Обновление списка URL-адресов для отражения нового доменного имени.
- Изменение идентификаторов продуктов в базе данных или CSV-файле.
- Форматирование данных для импорта в другую систему и многое другое.
Основный синтаксис использования sed следующий, где:
Placeholder | Function |
---|---|
command | Controls sed’s behavior. |
options | Allows you to customize the behavior of the sed command |
input_file | Specifies the file or text stream that you want to edit. Typically, you can specify a single file or stream, but concatenating multiple files or streams by redirection also works. |
output_file | Specifies the file that contains the results of your sed command. The file can be new or the same as input_file, depending on how you use sed. |
Предположим, у вас есть текстовый файл с именем urls.txt
, содержащий список URL-адресов, и вы хотите обновить все URL-адреса для использования нового доменного имени.
1. Выполните команды echo
ниже, чтобы создать файл urls.txt
в текущем каталоге. Эти команды не выводят результат, а записывают указанные тексты в файл.
2. Затем выполните команду cat
, чтобы просмотреть содержимое файла urls.txt. cat urls.txt
Вывод подтверждает три старых URL-адреса, записанных в файле urls.txt.

3. Теперь выполните команду ниже, чтобы найти и заменить (s
) все вхождения строки old-domain.com
на new-domain.com
в файле urls.txt
.
Вы увидите, что URL-адреса в вашем входном файле были обновлены новым доменом, как показано.

Замена N-го вхождения строки
Помимо базовой функциональности поиска и замены, у sed есть дополнительные встроенные команды, позволяющие выполнять более сложные текстовые преобразования. Одним из таких случаев является замена n-го вхождения строки шаблона в одной строке текста.
Например, вы хотите обновить второе поле в CSV-файле новым значением или обновить третье вхождение строки в дампе базы данных.
Основный синтаксис для этой команды выглядит следующим образом:
pattern
– это строка, которую нужно заменить.replacement
– это строка, которой нужно заменить.n
– is the nth occurrence of the string to replace (e.g.,1
=first occurrence,2
=second occurrence…).
Чтобы увидеть, как заменить n-е вхождение строки, выполните следующие шаги:
Запустите следующую команду echo
, чтобы создать строку текста с тремя вхождениями строки quick
. Затем команда sed
заменяет (s
) второе вхождение (2
) строки quick
на строку fast
.
Как видно ниже, только второе вхождение строки quick было заменено строкой fast, в то время как все остальные вхождения остались неизменными.
Команда nth
чувствительна к регистру по умолчанию. В результате команда ищет только точное совпадение строки. Чтобы игнорировать регистр букв в строке, перейдите к следующему шагу.

? Обратите внимание, что команда
nth
считает вхождения строки слева направо. Более того, командаnth
работает только с одной строкой текста. Для выполнения замены в нескольких строках используйте другой метод, продемонстрированный в следующем разделе.
Затем выполните следующую команду, чтобы заменить второе вхождение строки quick
на fast
, игнорируя регистр (i
).
Опция i
пригодится при работе с текстом с непостоянным написанием.
В выводе ниже второе вхождение слова quick (QuiCk) успешно заменено строкой fast — независимо от регистра букв.

Замена Всех Вхождений Соответствующего Шаблона/Строки
Вместо замены n-го вхождения строки, возможно, вы планируете заменить все его вхождения. Это существенно помогает в вашем плане массового обновления каждого вхождения строки авторского права текущим годом, например.
1. Создайте файл с именем input.txt с следующим содержимым в выбранном вами текстовом редакторе.
This is a quick test.
The quick brown fox jumps over the lazy dog.
Quick, you need to finish this task before it gets too late.
2. Затем выполните следующую команду, чтобы заменить (s
) все вхождения слова quick
на fast
из файла input.txt
. После замены изменения записываются в файл output.txt
.
3. Теперь выполните команду ниже, чтобы просмотреть содержимое файла output.txt
и проверить, была ли выполнена замена.
Вы увидите, что все вхождения слова quick были заменены на fast, как показано ниже. Аналогично команде nth
, команда g
чувствительна к регистру и заменяет только точные совпадения.
Строка Quick не будет заменена, как показано ниже, но вы можете использовать опцию i
для выполнения регистронезависимых замен.

Замена Соответствующего Шаблона/Строки на Определенной Линии
Возможно, вы уже знаете, на какой строке вы хотите заменить строку. Зачем заменять все вхождения, если можно заменить строки на конкретных строках? Эта функция полезна при внесении изменений в определенную строку файла или потока данных, оставляя остальные строки без изменений.
Ниже приведен синтаксис замены строки с определенной строки, где n
представляет номер строки.
1. Создайте файл с именем myfile.txt со следующим содержимым.
test1
test2
test3
2. Затем выполните следующую команду sed
, чтобы выполнить следующее:
- Поиск слова
test2
со второй строки (2
) файлаmyfile.txt
. Замените (s
) словоtest2
наtest2_changed
. Запишите изменения (>
) в новый файл с именемmyfile_changed.txt
.
This command does not provide output to the terminal since the changes are written to a new file. But you will verify the changes in the following step.
3. Наконец, выполните следующую команду cat, чтобы просмотреть содержимое файла myfile_changed.txt
.
Как видите ниже, вторая строка файла myfile.txt была заменена на test2_changed, в то время как все остальные строки остались без изменений.

Вывод измененных строк строк исключительно
Вместо того чтобы печатать весь контент файла после внесения изменений, вы можете захотеть вывести измененные строки исключительно. Как? Используя флаг p
вместе с опцией -n
.
Ниже приведен синтаксис вывода измененных строк исключительно, где:
- Опция
-n
сообщаетsed
подавлять стандартное поведение печати каждой строки. - Флаг
p
указываетsed
распечатать вывод команды.
Откройте файл myfile.txt и замените его содержимое на следующее. Обратите внимание, что вторая строка неправильна, так как слово first
должно быть заменено на second
.
This is the first line of my file.
This is the first line of my file.
This is the third line of my file.
Теперь выполните следующую команду sed
, чтобы заменить строку first
на second
во второй строке (2
) файла myfile.txt
, но вывести только измененные строки (p
).
Вы увидите вывод измененной второй строки только в вашем терминале, как показано ниже.

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