Если вы новичок в Linux или только начинаете знакомиться с командной строкой, то команда sed наверняка вызывает интерес. Это мощный инструмент для обработки текста и автоматизации задач редактирования файлов прямо в терминале.
В этой статье мы подробно расскажем о команде sed, о том, как она работает, и приведем простые примеры использования с объяснениями.
Что такое команда sed?
sed (сокращение от stream editor — «редактор потоков») — это программа в Linux, которая позволяет выполнять автоматические преобразования текста. Она умеет искать, заменять, удалять или вставлять строки и слова внутри файла или текста, не открывая его в текстовом редакторе.
Это очень удобно, если вам нужно быстро и автоматически изменить большое количество файлов или выполнить повторяющуюся операцию по поиску и замене.
Как работает команда sed
Основной принцип работы sed — чтение потока текста (например, файла или вывод другой команды), применение указанных изменений и вывод результата в терминал или в другой файл.
Стандартный синтаксис команды
В общем виде команду можно описать следующим образом:
sed [опции] 'скрипт' файл
или
echo "текст" | sed 'скрипт'
Где скрипт — набор инструкций, которые sed выполнит по отношению к тексту.
Основные опции команды sed
| Опция | Назначение | Пример использования |
| -i | редактировать файл на месте | sed -i ‘s/старое/новое/’ файл.txt |
| -e | добавить несколько команд | sed -e ‘s/привет/здравствуйте/’ -e ‘s/мир/земля/’ файл.txt |
| -n | подавлять автоматическую печать, использовать только явные команды p | sed -n ‘s/старое/новое/p’ файл.txt |
| -r | использовать расширенные регулярные выражения (в некоторых дистрибутивах -E) | sed -r ‘s/[0-9]+/число/’ файл.txt |
Часто используемые варианты команды sed
- Как выполнять замену текста
- Замена с регулярными выражениями
- Удаление строк по условию
- Вставка и добавление строк
Как выполнять замену текста
Самое популярное использование sed — замена слова или фразы. У нас есть простой текстовый файл следующего содержания:
waky@ubuntu:~$ cat text.txt
Fuzzy Wuzzy was a bear, Fuzzy Wuzzy had no hair,
Fuzzy Wuzzy wasn't fuzzy, was he?
waky@ubuntu:~$
Заменим в нем какое-нибудь слово, например:
waky@ubuntu:~$ sed 's/Fuzzy/Furry/' text.txt
Furry Wuzzy was a bear, Fuzzy Wuzzy had no hair,
Furry Wuzzy wasn't fuzzy, was he?
waky@ubuntu:~$
Это заменит первое появление слова Fuzzy на Furry в каждой строке файла text.txt, и выведет результат в терминал, не изменяя оригинал файла.
Чтобы заменить все вхождения первого слова, нужно добавить параметр g в конце условия:
waky@ubuntu:~$ sed 's/Fuzzy/Furry/g' text.txt
Furry Wuzzy was a bear, Furry Wuzzy had no hair,
Furry Wuzzy wasn't fuzzy, was he?
waky@ubuntu:~$
До этого момента, применение команды sed меняло только вывод. Сам файл оставался без изменений:
waky@ubuntu:~$ cat text.txt
Fuzzy Wuzzy was a bear, Fuzzy Wuzzy had no hair,
Fuzzy Wuzzy wasn't fuzzy, was he?
waky@ubuntu:~$
Чтобы изменить файл используйте опцию -i:
waky@ubuntu:~$ sed -i 's/Fuzzy/Furry/g' text.txt
waky@ubuntu:~$
Проверим результат выполнения команды, выведем содержимое файла на экран:
waky@ubuntu:~$ cat text.txt
Furry Wuzzy was a bear, Furry Wuzzy had no hair,
Furry Wuzzy wasn't fuzzy, was he?
waky@ubuntu:~$
Теперь содержимое файла изменилось.
Замена с регулярными выражениями
sed умеет работать с расширенными шаблонами регулярных выражений. Например, заменим все прописные буквы звездочками:
waky@ubuntu:~$ sed -r 's/[a-z]/*/g' text.txt
F**** W**** *** * ****, F**** W**** *** ** ****,
F**** W**** ****'* *****, *** **?
waky@ubuntu:~$
Здесь [a-z] — означает любую прописную букву.
Или, в чем больше смысла, заменим все заглавные буквы прописными:
waky@ubuntu:~$ sed -r 's/[A-Z]/\L&/g' text.txt
furry wuzzy was a bear, furry wuzzy had no hair,
furry wuzzy wasn't fuzzy, was he?
waky@ubuntu:~$
Здесь [A-Z] — любая заглавная, & — элемент, совпавший с шаблоном, а \L — строчная замена.
Удаление строк по условию
Чтобы удалить все строки, содержащие слово в конце условия ставится ключ d:
waky@ubuntu:~$ sed '/hair/d' text.txt
Furry Wuzzy wasn't fuzzy, was he?
waky@ubuntu:~$
Из вывода была убрана первая строчка, содержащая слово hair.
Вставка и добавление строк
Допустим, нужно вставить текст после строки, содержащей определенное слово. Тогда нам поможет опция a:
waky@ubuntu:~$ sed '/Wuzzy/a\new line' text.txt
Furry Wuzzy was a bear, Furry Wuzzy had no hair,
new line
Furry Wuzzy wasn't fuzzy, was he?
new line
waky@ubuntu:~$
Здесь после каждой строки с Wuzzy будет добавлена строка new line.
Заключение
Команда sed — незаменимый инструмент для быстрого автоматического редактирования текста в Linux. Ее можно применять для поиска и замены, удаления строк, вставки текста и множества других задач. Освоение sed значительно ускорит работу с файлами и сделает автоматизацию процессов проще.
Если хотите лучше освоить sed, советуем практиковаться, комбинировать команды и изучать регулярные выражения. Это мощное оружие для автоматизации и обработки текста в Linux!