sed (Stream Editor) - это команда в операционных системах на базе Unix/Linux, которая используется для обработки текстов. Если говорить простыми словами, с помощью sed можно находить, заменять, удалять или изменять текст в файлах или потоках данных.
Представь, что у тебя есть текстовый файл, и ты хочешь заменить в нём какие-то слова или удалить строки. Вместо того чтобы делать это вручную, ты можешь использовать sed для автоматической обработки текста.
Пример: если у тебя есть файл example.txt с текстом, и ты хочешь заменить все вхождения слова "яблоко" на "апельсин", ты можешь использовать такую команду (в терминале):
sed 's/яблоко/апельсин/g' example.txt
- s — это команда замены (substitute),
- яблоко — слово, которое нужно найти,
- апельсин — слово, на которое нужно заменить,
- g — указывает, что замена должна происходить для всех вхождений на каждой строке.
Таким образом, sed позволяет быстро и просто автоматизировать работу с текстами, особенно когда нужно внести много однотипных изменений.
Классическое определение sed
sed - Стримовый (потоковый) текстовый редактор
или вот еще:
sed (Stream EDitor) — это утилита для обработки и редактирования текстов в потоковом режиме на основе регулярных выражений. Она позволяет выполнять текстовые преобразования на лету, используя команды и сценарии. Основное применение sed заключается в автоматической обработке текстов, редактировании файлов и потоков данных.
Основные концепции
- Потоковый редактор: sed работает построчно, читая текстовый поток (например, из файла или стандартного ввода), применяя к каждой строке указанные команды, а затем выводя результат.
- Без изменения оригинала: По умолчанию sed не изменяет исходный файл. Если требуется сохранить изменения, необходимо указать опцию для записи в файл.
Синтаксис
sed [опции] 'команда' [файл]
- команда — это набор инструкций, которые будут выполнены над каждой строкой. Например, замена текста, удаление строк, вставка новых строк и т.д.
- файл — файл, который будет обрабатываться. Если файл не указан, sed работает с вводом через стандартный поток (stdin).
Примеры использования sed
1. Замена текста
Самая распространенная команда — это s, которая используется для замены.
sed 's/старое/новое/' файл.txt
Этот пример заменит первое вхождение слова "старое" на "новое" в каждой строке файла файл.txt.
Пример совместно с командой echo:
echo "Привет, мир!" | sed 's/мир/вселенная/'
Результат:
Привет, вселенная!
2. Замена всех вхождений в строке
По умолчанию, sed заменяет только первое вхождение в строке. Чтобы заменить все вхождения, нужно использовать флаг g (global).
sed 's/старое/новое/g' файл.txt
Пример совместно с командой echo:
echo "apple apple apple" | sed 's/apple/banana/g'
Результат:
banana banana banana
3. Изменение файла на месте
Чтобы изменить исходный файл на месте, используйте опцию -i:
sed -i 's/старое/новое/g' файл.txt
Этот синтаксис перезапишет файл файл.txt с внесенными изменениями.
Примечание: В системах на базе BSD (например, macOS) необходимо использовать синтаксис -i '' или -i.bak для создания резервной копии файла.
sed -i.bak 's/старое/новое/g' файл.txt
Это создаст резервную копию файла с расширением .bak.
4. Удаление строк
Команда d используется для удаления строк.
- Удалить строку по номеру:
sed '5d' файл.txt
Этот пример удалит пятую строку файла.
- Удалить диапазон строк:
sed '2,4d' файл.txt
Этот пример удалит строки со второй по четвертую включительно.
Пример совместно с командой echo:
echo -e "строка1\nстрока2\nстрока3\nстрока4" | sed '2,3d'
Результат:
строка1
строка4
5. Удаление строк по шаблону
Можно удалять строки, соответствующие определенным регулярным выражениям.
- Удалить строки, содержащие слово "ошибка":
sed '/ошибка/d' файл.txt
Пример совместно с командой echo:
echo -e "Успех\nОшибка\nУспех" | sed '/Ошибка/d'
Результат:
Успех
Успех
6. Вставка строк
Команда i используется для вставки строки перед указанной.
sed '2i Вставленная строка' файл.txt
Этот пример вставит строку "Вставленная строка" перед второй строкой в файле файл.txt.
Пример совместно с командой echo:
echo -e "строка1\nстрока2\nстрока3" | sed '2i Вставленная строка'
Результат:
строка1
Вставленная строка
строка2
строка3
7. Добавление строк
Команда a добавляет строку после указанной.
sed '2a Добавленная строка' файл.txt
Пример совместно с командой echo:
echo -e "строка1\nстрока2\nстрока3" | sed '2a Добавленная строка'
Результат:
строка1
строка2
Добавленная строка
строка3
8. Печать строк
Команда p позволяет выводить строки, соответствующие шаблону или диапазону.
- Напечатать строки, содержащие слово "ошибка":
sed -n '/ошибка/p' файл.txt
Флаг -n подавляет вывод всех строк, кроме тех, которые соответствуют шаблону и были явно указаны для вывода командой p.
Пример совместно с командой echo:
echo -e "Успех\nОшибка\nУспех" | sed -n '/Ошибка/p'
Результат:
Ошибка
9. Замена с использованием регулярных выражений
sed поддерживает регулярные выражения для поиска сложных шаблонов.
Пример 1: Замена цифр на символы
echo "abc 123 def" | sed 's/[0-9]/X/g'
Результат:
abc XXX def
Пример 2: Замена нескольких пробелов на один
echo "слово слово" | sed 's/ \+/ /g'
Результат:
слово слово
Здесь \+ означает "один или более пробелов".
10. Перемена местами двух слов
Использование групп регулярных выражений для перестановки слов.
Пример:
echo "first second" | sed 's/\([a-zA-Z]\+\) \([a-zA-Z]\+\)/\2 \1/'
Результат:
second first
Здесь:
- \([a-zA-Z]\+\) — это первая группа (слово из букв).
- \([a-zA-Z]\+\) — это вторая группа.
- В замене \2 \1 указывает на перестановку второй и первой групп.
11. Удаление пустых строк
Чтобы удалить пустые строки из файла:
sed '/^$/d' файл.txt
Пример:
echo -e "строка1\n\nстрока2" | sed '/^$/d'
Результат:
строка1
строка2
Заключение
sed — это чрезвычайно мощный инструмент для текстовой обработки, особенно в сочетании с регулярными выражениями. С его помощью можно выполнять различные текстовые манипуляции, такие как замена, удаление, вставка строк или обработка больших текстовых файлов.
Некоторые полезные советы:
- Тестирование: Всегда полезно сначала протестировать команды на небольших примерах или использовать sed без записи в файл.
- Резервные копии: Перед изменением файлов с -i рекомендуется делать резервные копии (-i.bak).
sed часто используется в скриптах и в командной строке для автоматизации задач по обработке текстов.
Если Вам интересно, что еще можно найти на канале QA Helper, прочитайте статью: Вместо оглавления. Что вы найдете на канале QA Helper - справочник тестировщика?
Подписывайтесь в на мой канал в Телеграмм.
Не забудьте подписаться на канал, чтобы не пропустить полезную информацию: QA Helper - справочник тестировщика
Пишите в комментариях какой пункт было бы интересно рассмотреть более подробно.
Обязательно прочитайте: Что должен знать и уметь тестировщик
Также будет интересно почитать: Вопросы которые задают на собеседовании тестировщикам